2

我正在阅读一篇关于 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 个波前没有问题。

如果有我遗漏的东西,我会在这里阅读这篇文章。(第 7 段)

4

1 回答 1

0

关于全局限制:

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

现在对于 2 个波前:

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

一般来说,ATI Stream Programming Manual OpenCL是一个很好的学习资源。请注意,该链接的结果是快速谷歌搜索的结果,并且似乎没有指向最新版本(当我使用 rev 1.05 时它指向 rev 1.03,我不知道这是否是最新的)。不知道这是否有任何重要区别,但可能需要进行更深入的搜索。

于 2011-05-16T13:51:28.200 回答