Opencl 本地工作规模对性能的影响及其原因

Opencl 本地工作规模对性能的影响及其原因,opencl,pyopencl,Opencl,Pyopencl,大家好…… 我是opencl的新手,正在尝试更多地探索它 openCL程序中的本地工作大小是什么,以及它对性能的影响 我正在研究一些图像处理算法,并为我的openCL内核提供了一些支持 作为 当我换了相同的内核时 size_t local_item_size = 16; 保持一切不变 我的绩效提高了大约4-5倍。本地工作规模,也称为工作组规模,是每个工作组中工作项的数量 每个工作组在一个计算单元上执行,该计算单元能够处理一组工作项,而不仅仅是一个 因此,当您使用太小的组时,您会浪费一些计算能

大家好……
我是opencl的新手,正在尝试更多地探索它

openCL程序中的本地工作大小是什么,以及它对性能的影响

我正在研究一些图像处理算法,并为我的openCL内核提供了一些支持 作为

当我换了相同的内核时

 size_t local_item_size = 16;
保持一切不变


我的绩效提高了大约4-5倍。

本地工作规模,也称为工作组规模,是每个工作组中工作项的数量

每个工作组在一个计算单元上执行,该计算单元能够处理一组工作项,而不仅仅是一个

因此,当您使用太小的组时,您会浪费一些计算能力,并且只能在计算单元级别进行粗略的并行化

但是,如果您在一个组中有太多的工作项,您也可能会失去一些并行化的机会,因为有些计算单元可能不会被使用,而另一些则会被过度使用

因此,您可以使用多个值进行测试以找到最佳值,或者让OpenCL通过传递NULL作为本地工作大小来为您选择一个好值

PS:我很想知道OpenCL选项与您之前的值相比的性能,所以请您进行测试并公布结果。
谢谢:)

这很有趣。。。。所以我应该保持本地工作大小=(一个计算单元中处理元素的数量)。另外,我将很快发布结果。这不是一个好主意。如果使用CPU,每个计算单元只能有一个处理元素。因此,工作组大小为1。这很耗时。通常,内核的推荐工作组大小为64-128个工作项。不考虑本地内存的使用。您应该像这样设置工作组大小:通过调用clGetKernelWorkGroupInfo,您可以通过CL_KERNEL_preferred_work_group_size_multiple获得全局_size/Compute Unit的首选工作组大小倍数。而且,为了在CPU上使用矢量化,工作组大小必须是8的倍数;OpenCL将为工作组选择“最佳”大小,但它没有考虑使用的本地内存。
 size_t local_item_size = 16;