0

根据 Kepler 白皮书,基于 Kepler 的 GPU 的 warp 大小为 32,每个多处理器包含 4 个 warp 调度程序,它们从选定的 warp 中选择两个独立的指令。这意味着每个时钟周期要执行 32*4*2 = 256 次计算,但多处理器仅包含 192 个 ALU。那么这些计算是如何进行的呢?

4

1 回答 1

2

白皮书的实际措辞如下:

SMX 以 32 个并行线程组的形式调度线程,称为 warp。每个 SMX 具有四个 warp 调度程序和八个指令调度单元,允许同时发出和执行四个 warp。Kepler 的quad warp 调度器选择四个warp,每个warp 可以在每个周期调度两条独立的指令。

解释是在任何给定的循环中,最多可以安排 4 个 warp。对于这 4 个 warp 中的每一个,每个 warp 可以发送(最多)2 个独立指令。“可以派出”与“将被派出”不同。

您所指的 192 个 ALU 与单精度浮点算术运算(用于本讨论目的的 SP 单元)有关。然而,SM(X) 中还有其他功能单元,例如双精度浮点运算单元(DP 单元)、加载/存储单元(LD/ST 单元)和其他单元。请参阅上面链接的白皮书第 8 页上的图表。如果给定的一组指令都在使用 SP 单元,则无法调度 8 条指令,最多可以调度 6 条(32x6=192)条指令。但是,如果指令组合包含不同类型的独立指令(例如加载、存储、SP 操作等),则 192 个 SP 单元的限制不一定是在任何给定周期中实际调度多少指令的决定因素。

底线是每个周期 8 条指令(2 个 inst/调度器 x 4 个调度器)是每个 SM(X) 的最大可能指令发出率。现实世界的代码不一定能做到这一点。由于停顿/饥饿情况,在给定的周期内完全有可能不会发出任何指令。

于 2014-05-28T16:27:40.433 回答