大家好..。
我是opencl的新手,并试图探索更多的@ it。
local_work_size在openCL程序中的工作是什么?在性能上它是如何重要的。
我正在为我的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倍。
发布于 2012-12-07 12:10:57
local-work-size,又名work-group-size,是每个工作组中的工作项的数量。
每个工作组在一个计算单元上执行,它能够处理一组工作项,而不仅仅是一个。
因此,当您使用太小的组时,您会浪费一些计算能力,并且只能在计算单元级别上得到一个粗略的并行化。
但是,如果组中有太多的工作项,您也可能会失去一些并行化的机会,因为某些计算单元可能不会被使用,而其他的可能会被过度使用。
因此,您可以使用许多值进行测试,以找到最好的值,或者只使用,让OpenCL通过将NULL作为本地工作大小来为您选择一个好的值。
PS :我会感兴趣的,与您以前的值相比,OpenCL选择的性能,所以请您做一个测试,并张贴结果。谢谢:)
https://stackoverflow.com/questions/13761191
复制相似问题