我有以下系统参数:
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)确定集合中的最大工作组元素数量
我试图找到类似的问题和明确的答案,但没有成功。 谢谢你的帮助!
答案 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,所以没有限制!您可以按自己喜欢的方式512x1x1
或256x2x1
等对512个工作项进行整形...
然而,限制可能是:16x16x16
。因此,即使您总共可以运行512,也只能使用16x16x2
,8x8x8
或16x8x4
...等。不允许的值为32x16x1
或{{ 1}}。
注意:受形状限制的情况并不少见。 nVIDIA设备通常有4096个工作组大小和512x1x1
限制。我猜他们是这样做的,因此他们可以将工作维度id存储在一个寄存器中。虽然1024x1024x1024
需要2个寄存器。