首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >opencl中并行和约简的实现

opencl中并行和约简的实现
EN

Stack Overflow用户
提问于 2015-07-31 15:22:47
回答 1查看 326关注 0票数 1

我正在查看链接提供的NVIDIA示例代码。

在示例内核代码(文件oclReduction_kernel.c)中,reduce4使用了

1)展开和消除线程id < 32的同步障碍。

2)除此之外,代码还使用blockSize检查来对本地内存中的数据进行求和。我认为在OpenCL中,我们有get_local_size(0/1)来了解工作组的大小。整块的尺寸让我很困惑。

以上两点我都听不懂。这些东西为什么和如何帮助优化?对reduce5和reduce6的任何解释也将是有帮助的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-31 23:34:42

在@Marco13 13的评论中,高级/还原/doc/还原。的幻灯片21和22中已经对此做了很好的解释。

  • 随着还原的进行,#“活动”线程减少
    • 当s <= 32时,我们只剩下一个翘曲。

  • 指令是在翘曲内同步的SIMD。
  • 这意味着当s <= 32:
    • 我们不需要__syncthreads()

    • 我们不需要“if (tid

没有展开,所有的翘曲都会执行for循环和if语句的每一次迭代。

并由https://www.pgroup.com/lit/articles/insider/v2n1a5.htm

代码实际上是由32个线程组成的组执行的,NVIDIA称之为翘曲。 每个核心可以执行一个顺序线程,但是核心以NVIDIA所称的SIMT (单指令,多线程)的方式执行;同一组中的所有核同时执行相同的指令,就像经典的SIMD处理器一样。

Re 2) blockSize看起来是工作组的大小。

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

https://stackoverflow.com/questions/31749780

复制
相关文章

相似问题

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