我正在查看链接提供的NVIDIA示例代码。
在示例内核代码(文件oclReduction_kernel.c)中,reduce4使用了
1)展开和消除线程id < 32的同步障碍。
2)除此之外,代码还使用blockSize检查来对本地内存中的数据进行求和。我认为在OpenCL中,我们有get_local_size(0/1)来了解工作组的大小。整块的尺寸让我很困惑。
以上两点我都听不懂。这些东西为什么和如何帮助优化?对reduce5和reduce6的任何解释也将是有帮助的。
发布于 2015-07-31 23:34:42
在@Marco13 13的评论中,高级/还原/doc/还原。的幻灯片21和22中已经对此做了很好的解释。
没有展开,所有的翘曲都会执行for循环和if语句的每一次迭代。
并由https://www.pgroup.com/lit/articles/insider/v2n1a5.htm
代码实际上是由32个线程组成的组执行的,NVIDIA称之为翘曲。 每个核心可以执行一个顺序线程,但是核心以NVIDIA所称的SIMT (单指令,多线程)的方式执行;同一组中的所有核同时执行相同的指令,就像经典的SIMD处理器一样。
Re 2) blockSize看起来是工作组的大小。
https://stackoverflow.com/questions/31749780
复制相似问题