工作组规模

时间:2012-07-13 07:40:06

标签: opencl workgroup

对于给定的内核,为什么work_groups总是大小相同? 我在某处读到(对于我们没有指定本地工作大小的情况)openCL为内核创建了3个工作组(每个工作项217个),651个工作项(可被3整除),同时创建了653个工作 - 每个工作项的组,因为653是素数。

假设我们指定了local_work_size(即工作组中的工作项数),比方说,5。我们已将总工作项(global_work_size)指定为9.如何创建工作组?这就是为什么global_work_size必须是local_work_size的倍数?如果数据只需要9个工作项,如何将其增加到10(local_work_size的倍数,5)?

如果不知道有多少工作组会执行内核,为什么主机不能为结果数组分配内存呢?

请帮忙。 我在这上面阅读了所有这些: http://www.openclblog.com/2011/09/work-group-sizes.html

1 个答案:

答案 0 :(得分:8)

OpenCL工作组的大小不需要始终相同。全局工作组大小通常与问题大小相关。根据最大化计算单元吞吐量和需要共享本地内存的线程数来选择本地工作组大小。

让我们考虑几个例子;

A)将图像从N按M缩放到X按Y.

B)总和N数。

对于A)

明显的全球工作组规模是X,Y,1。为什么?这给出了每个像素1个线程。 应根据需要处理以生成输出像素的输入像素数来选择本地工作组大小。

EG。

A.1)将图像从4K缩放3.2K到64乘64. GWG尺寸[64,64,1] LWG尺寸256 A.2)将图像从4k缩放到3.2k到800乘600.GWG尺寸[800,60,1] LWG尺寸256

对于B)

明显的全球工作组规模为N / 2,1,1,为什么?所以每个线程首先将2个值相加。应将本地工作组设置为最大设备

有一些警告;

1)全局工作组大小受全局内存大小和最大全局内存分配大小的限制。

2)每台设备的最大本地工作组大小通常为256