工件尺寸对OpenCL性能的影响

工件尺寸对OpenCL性能的影响,opencl,Opencl,我最初的工作单元大小为11*11*6779。为了简单起见,我不想将其转换为1D全局工作大小。当我把它改成21*21*6779时,性能比以前慢了5-6倍。据我所知,代码与正在运行的线程数无关 传输的数据量只增加了4倍,我不认为这是程序运行较慢的原因,因为我测试了内存分配过程 请注意,我的设备的最大工作项为256*256*256,这意味着我将使用所有可用工作项的一半,并且这不是一个也用于显示的专用设备 我想知道将工作项大小设置为21*21*6779是否会使用过多的我的工作项,或者尺寸对openCL来

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

传输的数据量只增加了4倍,我不认为这是程序运行较慢的原因,因为我测试了内存分配过程

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


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

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

因此我尝试了您提出的解决方案,但速度与工作项数量较少的解决方案相比大约慢了4倍,从4毫秒到16毫秒。您认为主机和设备之间的传输可能是其中的一个因素吗?在更快的情况下,我有2,4密耳的浮动,在较慢的情况下,9密耳的浮动,数据传输可能与此有关。我找到了原因,在我刚刚创建新内存之前,我通过重用设备中保留的内存来修复它。