首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dpc++使用parallel_for范围从1到n-2启动do循环。

dpc++使用parallel_for范围从1到n-2启动do循环。
EN

Stack Overflow用户
提问于 2022-04-26 21:35:21
回答 1查看 109关注 0票数 0

是否可以使用dpc++ parallel_for启动do循环,索引从1到n-2?

代码语言:javascript
复制
h.parallel_for(range{lx , ly }, [=](id<2> idx

这将给出一个从0到lx-1的do循环,我必须这样做。

代码语言:javascript
复制
idx[0]>0 && idx[1]>0 && idx[0]<lx-1 && idx[1]<ly-1

然后我就能完成循环了?

另外,dpc++是否像4D parallel_for那样支持?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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_fornd_rangend_itemitem类的偏移。因此,并行迭代空间都是从(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索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72020782

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档