根据Kepler白页,基于Kepler的GPU的warp大小为32,每个多处理器包含4个warp日程表,从所选择的warp中选择两个独立的指令。这意味着要执行每个时钟周期,32 * 4 * 2 = 256次计算,但多处理器仅包含192个ALU。那么这些计算是如何进行的?
答案 0 :(得分:2)
实际的whitepaper措辞如下:
SMX在称为warps的32个并行线程组中调度线程。每个SMX都有四个经线 调度程序和八个指令调度单元,允许发出和执行四个warp 同时。 Kepler的quad warp调度程序选择四个warp,每个两个独立指令 warp可以在每个周期发送。
解释是,在任何给定的周期中,最多可以安排4次经线。对于这4个经线中的每一个,可以发送(最多)每个经线2个独立指令。 “可以派遣”与“将被派遣”不同。
您所指的192个ALU与单精度浮点算术运算(本讨论的SP单位)有关。然而,SM(X)中还有其他功能单元,例如双精度浮点运算单元(DP单元),加载/存储单元(LD / ST单元)和其他单元。请参阅上面链接的白皮书第8页上的图表。如果给定的指令集全部使用SP单元,则无法调度8个指令,最多可以调度6个(32x6 = 192)。但是,如果指令混合包含不同类型的独立指令(例如,加载,存储,SP操作等),那么192个SP单元的限制不一定是在任何给定周期中实际调度了多少指令的决定因素。
底线是每个周期8个指令(2个inst / scheduler x 4个调度程序)是每个SM(X)的最大可能指令发布率。现实世界的代码不一定能达到这个目的。由于失速/饥饿条件,在给定的循环中完全有可能没有指令被发出。