local_work_size对性能及其原因的影响

Mel*_*uha 2 opencl pyopencl

大家好......
我是opencl的新手,并试图探索更多@它.

openCL程序中local_work_size的工作是什么以及它在性能方面的重要性.

我正在研究一些图像处理算法和我给我的openCL内核

size_t local_item_size = 1; 
size_t global_item_size = (int) (ceil((float)(D_can_width*D_can_height)/local_item_size))*local_item_size; // Process the entire lists
ret = clEnqueueNDRangeKernel(command_queue, kernel, 1, NULL,&global_item_size, &local_item_size, 0, NULL, NULL);
Run Code Online (Sandbox Code Playgroud)

当我改变时为同一个内核

 size_t local_item_size = 16;
Run Code Online (Sandbox Code Playgroud)

保持一切相同.

我的性能提高了4-5倍.

Pra*_*eek 6

当地工作尺寸,又名工作组大小,是多少工作项目工作组.

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

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

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

因此,您可以使用许多值进行测试以找到最佳值,或者让OpenCL通过传递NULL作为local-work-size 来为您选择一个好的.

PS:我有兴趣知道OpenCL选择与之前的值相比的表现,所以请你做一个测试并发布结果.谢谢 :)