CUDA中的块尺寸

smi*_*dha 5 sdk cuda

我有运行cuda-4.0的NVIDIA GTX 570计算能力2.0.

CUDA SDK中的deviceQuery可执行文件为我提供了有关我的CUDA设备及其各种属性的信息.输出中的两行是

每个块的最大线程数:1024

块的每个维度的最大大小:1024 x 1024 x 64

为什么块的第三维限制为最多64个线程,而X和Y维度最多可以变为1024个线程?

Pat*_*k87 3

EDIT2:另外,请对此持保留态度;这纯粹是假设的答案,或者是猜测。64 是最大值确实可能有一个基于硬件的明确原因。坦率地说,我不知道,我的答案是基于这样的假设:本身不存在这样的硬件限制。

这可能是三件事的结合:首先,可以驻留在块内的线程数量受到限制;其次,块尺寸通常是 32 的倍数,甚至更常见的是大于 32 的 2 次方;第三,解决多维问题时使用的坐标系通常是定向的,以便您可以直接查看场景(即,重要位在 X 和 Y 中的分布比在 Z 中的分布要多)。

CUDA 自然必须支持一维访问,因为在适用时这是一种非常常见且高效的访问模式。为了支持这一点,必须允许X 尺寸在 1024 个螺纹的整个范围内变化。

为了支持不太常见的 2D 访问,CUDA 至少应支持 X 维度最多 512 个(使用 X 维度应在坐标系中定向的约定,以便测量最大扩展)和 Y 维度最多 32 个。它必须支持 X 维度最多 1024,我想他们放宽了 X 维度不小于 Y 维度的要求,并允许完整的 1024 范围的 Y 值。然而,根据我的理解,32 对于 Y 尺寸最大值来说已经足够大了。

为了支持3D访问,保持X,Y >= Z并试图达到1024,似乎最好的情况是X=Y=Z=10;因此,根据我的假设,没有真正的理由允许 Z 大于 10

总之,我不明白为什么他们不能达到最大值(1024、32、10)。我的问题是为什么要制作它们(1024, 1024, 64)?我不断回想起的唯一答案是允许程序员有一定的灵活性来违反 X>=Y>=Z 坐标系约定。

编辑:鉴于我的总结和假设答案,您问题的真正答案是:这是一个任意决定。