NDRange中的最大工作项数,工作组数

时间:2015-09-28 18:32:45

标签: parallel-processing opencl gpu gpgpu

我有以下系统参数:

CL_DEVICE_TYPE_GPU
Device maximum compute units = 20
Device maximum Work Item Dimensions = 3
Device maximum Work Item Sizes = 512 x 512 x 512
Device maximum Work Group Size = 512 

据我所知,如果Item Dimensions = 1 - 工作组中有一维工作项。如果Item Dimensions = 2 - 工作组中有二维数组或工作项矩阵,依此类推。反过来,工作组一起代表一组(NDRange)。 但我无法理解如何: 1)确定工作组内数组或矩阵中的最大工作项数 2)确定集合中的最大工作组元素数量

我试图找到类似的问题和明确的答案,但没有成功。 谢谢你的帮助!

1 个答案:

答案 0 :(得分:2)

只关注设备最大工作项/组限制。 计算单位仅用于设备功能。

工作组规模的限制由下式给出:

Device maximum Work Group Size = 512

这是工作组中的最大工作项数。它与HW中的限制相匹配。

然后,在你的情况下,你必须为组的“形状”添加一个额外的约束:

Device maximum Work Item Dimensions = 3
Device maximum Work Item Sizes = 512 x 512 x 512

这意味着限制是3个维度,每个维度512,所以没有限制!您可以按自己喜欢的方式512x1x1256x2x1等对512个工作项进行整形...

然而,限制可能是:16x16x16。因此,即使您总共可以运行512,也只能使用16x16x28x8x816x8x4 ...等。不允许的值为32x16x1或{{ 1}}。

注意:受形状限制的情况并不少见。 nVIDIA设备通常有4096个工作组大小和512x1x1限制。我猜他们是这样做的,因此他们可以将工作维度id存储在一个寄存器中。虽然1024x1024x1024需要2个寄存器。