工作大小维度对性能OpenCL的影响

时间:2018-05-13 20:09:43

标签: opencl

我最初的工作单位大小为11*11*6779。为简单起见,我不想将其转换为1D全局工作大小。当我将其更改为21*21*6779时,性能比以前慢5-6倍。据我所知,代码与正在运行的线程数无关。

传输的数据量只有 4x 更大,我不认为这是程序运行速度较慢的原因,因为我测试了内存分配过程。

请注意,我的设备的最大工作项为256*256*256,这意味着我将使用所有可用工作项的一半,这不是专用设备(也用于显示..)。

我想知道将工作项大小设置为21*21*6779是否使用了太多的工作项,或者维度是否对openCL调整起来不方便?

1 个答案:

答案 0 :(得分:1)

如果您的最大工作项是256x256x256,那么为什么使用21x21x6779(其中6779大于256)?请注意,如果未指定工作组大小,运行时将尝试选择一个可以分割全局工作大小的工作组。如果您的维度不容易被运行时整除,则可能会选择糟糕的工作组大小。这可以解释为什么性能会根据全球工作规模而变化。我建议您指定工作组大小,并使全局工作大小为其倍数(如果需要,将实际大小作为参数传递,并在每个工作项中检查它是否在范围内;这是您将看到的典型模式在OpenCL中很多。)