2012-07-13 29 views
8

对于给定的内核,为什么work_groups的大小始终相同? 我读了某处(对于没有指定本地工作量的情况),openCL创建了3个工作组(每个工作项217个工作项),内核包含651个工作项(可被3整除),同时创建653个每个工作项目有1个工作组,因为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

回答

6

OpenCL工作组大小不必始终保持相同大小。全球工作组大小通常与问题大小有关。本地工作组大小的选择基于最大化计算单位吞吐量和需要共享本地内存的线程数。

让我们考虑一些例子;

A)由M由Y.

B)萨姆N个缩放从N个一个图像到X。

对于A)

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

例如, A)将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,为什么呢?所以每个线程开始将两个值相加在一起。本地工作组应设置为最大设备。

有一些注意事项;

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

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

+0

谢谢Tim !!感谢您的回答。 :) 因此,GWG大小不一定是LWG大小的倍数? – Remy 2012-07-15 06:31:32

+0

澄清是的LWG大小必须是一个mukltiple或一个null。从手册页http://www.khronos.org/registry/cl/sdk/1.1/docs/man/xhtml/ – 2012-07-15 14:28:05

+0

非常感谢。:) – Remy 2012-07-15 19:46:48