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倍。
答案 0 :(得分:6)
本地工作规模,又名工作组大小,是每个中工作项的数量工作组强>
每个工作组都在计算单元上执行,该工作组能够处理大量工作项,而不仅仅是一个工作项。
因此,当您使用太小的组时,您会浪费一些计算能力,并且只能在计算单元级别进行粗略的并行化。
但是如果你在一个组中有太多的工作项,你也可能失去一些并行化的机会,因为一些计算单元可能不被使用,而其他计算单元将被过度使用。
所以你可以通过传递 NULL 作为local-work-size来测试多个值来找到最好的值,或者只是让OpenCL选择一个好的。
PS:我有兴趣了解OpenCL选择与您之前的值相比的表现,所以请您进行测试并发布结果。 谢谢:))