是否可以使用dpc++ parallel_for启动do循环,索引从1到n-2?
h.parallel_for(range{lx , ly }, [=](id<2> idx这将给出一个从0到lx-1的do循环,我必须这样做。
idx[0]>0 && idx[1]>0 && idx[0]<lx-1 && idx[1]<ly-1然后我就能完成循环了?
另外,dpc++是否像4D parallel_for那样支持?
发布于 2022-04-27 11:37:43
在SYCL1.2.1中,parallel_for支持偏移,因此可以使用h.parallel_for(range{lx-2, ly-2}, id{1, 1}, [=](id<2> idx){ ... });。
但是,这个重载的已在SYCL 2020中被否决
取消了对
parallel_for、nd_range、nd_item和item类的偏移。因此,并行迭代空间都是从(0,0,0)开始的,开发人员现在需要自己处理任何偏移算法。对nd_item.get_global_linear_id()和nd_item.get_local_linear_id()的行为也作了相应的澄清。
因此,如果您想要符合最新的标准,您应该手动应用偏移量:
h.parallel_for(range{lx-2, ly-2}, [=](id<2> idx0) { id<2> idx = idx0 + 1; ... });
也就是说,根据您的数据布局,您最初使用“空”线程的方法可能会更快。
另外,dpc++是否像4D parallel_for那样支持?
不是的。您必须使用一维范围并手动计算4D索引。
https://stackoverflow.com/questions/72020782
复制相似问题