local_work_size对性能及其原因的影响

时间:2012-12-07 10:25:14

标签: opencl pyopencl

Hello Everyone ....
  我是opencl的新手,并试图探索更多@ it。

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倍。

1 个答案:

答案 0 :(得分:6)

本地工作规模,又名工作组大小,是每个工作项的数量工作组

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

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

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

所以你可以通过传递 NULL 作为local-work-size来测试多个值来找到最好的值,或者只是让OpenCL选择一个好的

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