2

大家好......
我是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);

当我改变时,对于相同的内核

 size_t local_item_size = 16;

保持一切不变。

我的性能提高了大约 4-5 倍。

4

1 回答 1

6

local-work-size又名work-group-size是每个work-group中工作项的数量。

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

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

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

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

PS:我有兴趣了解 OpenCL 选择与您以前的值相比的性能,所以请您进行测试并发布结果。谢谢 :)

于 2012-12-07T12:10:57.747 回答