可以放在SIMD上的波前数量

时间:2011-05-08 14:09:26

标签: gpu simd gpu-programming wavefront

我正在阅读一篇关于AMD GPU的文章,并对一个特定的例子感到困惑。给定SIMD单元有多个寄存器,如果需要x个寄存器,有多少波前可以占用SIMD?

具体而言,如果SIMD单元具有16k寄存器以在1-32个波前之间共享。那么这意味着每个波阵面平均可以有8个寄存器(如果有32个波前)。这很好。

然后接着说,SIMD上波前数量的全局限制为~20.6,这将给每个波前11-12个寄存器。

这部分让我感到困惑。接着说,如果使用83个或更多寄存器,只有2个波前可以占用SIMD。 (回想一下,波前是64宽)。

在我的计算中: 2 * 83 * 64 = 10628 registers这低于每SIMD给出的16,384。因此你可以有3个波前没问题。

我正在阅读文章here,如果有什么我错过了。 (第7段)

1 个答案:

答案 0 :(得分:0)

关于全球限制:

每个amd gpus都有一个全局限制,它可以支持多少个同步波前。此限制是特定于模型的,但通常不会在同一芯片的不同切割版本之间发生变化。例如对于cypress芯片(5830,5850,5870),每GPU有496个波前。由于这些芯片具有不同数量的CU,因此波前/ CU的最大数量(通过此约束计算)从58.4的35.4下降到5870的24.8。对于入门级芯片,此全局限制可以计算为高达96个波前/的值CU。在这些情况下,32个波前/ CU(8个工作组,4个波前)的限制适用于8个寄存器/线程。

现在是2个波前:

从ATI流程编程指南OpenCL中给出的数字来看,似乎可用寄存器的数量略低于16384,所以我猜(如纯猜测,没有找到任何相关的信息)一些寄存器用于内核不能直接访问的其他目的(指令指针和诸如此类的东西)。在给出的表中,没有分配使用超过15872个寄存器,因此可能是可用的最大值。当然这是纯粹的推测,所以可能只是某人在手册中使用了错误的数字并且每个人都在复制它。

一般来说,ATI Stream Programming Manual OpenCL是了解这一点的好资源。虽然链接是结果是快速谷歌搜索的结果,似乎没有指向最新的版本(它指向转1.03而我使用转1.05,我不知道这是否是最新的)。不知道这是否有任何重要的区别,但可能会有更深入的搜索。