大家好......
我是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倍.
在当地工作尺寸,又名工作组大小,是多少工作项目各工作组.
每个工作组都在一个计算单元上执行,该计算单元能够处理一堆工作项,而不仅仅是一个.
因此,当您使用太小的组时,您会浪费一些计算能力,并且只能在计算单元级别进行粗略的并行化.
但是,如果组中的工作项太多,您也可能失去一些并行化的机会,因为某些计算单元可能不会被使用,而其他计算单元会被过度使用.
因此,您可以使用许多值进行测试以找到最佳值,或者让OpenCL通过传递NULL作为local-work-size 来为您选择一个好的值.
PS:我有兴趣知道OpenCL选择与之前的值相比的表现,所以请你做一个测试并发布结果.谢谢 :)