工作规模维度对性能 OpenCL 的影响



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

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

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

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

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

最新更新