我试图验证参考GT200卡的单精度峰值性能。
从http://www.realworldtech.com/gt200/9/,我们有两个关于GT200的事实-
现在,每个SM总共有8个SPs和2个SFU,每个SFU有4个FP乘法单元,这些SPs和SFU可以同时工作在两个不同的端口上,正如它们在SM级别图中所解释的那样。每个SP可以执行MAD操作。
因此,我们正在研究每4个SP周期8个MAD操作和8个MUL操作。这给了我们16 +8=每4个SP时钟周期24次操作,MAD算作2次操作。由于2 SP时钟周期计算为一个着色时钟,我们有24/2 =12个操作每个着色时钟。对于参考GT200卡,着色器时钟= 1296 MHz/s。
因此,单精度峰值性能必须为= 1296 MHz/s * 30 SM * 12操作,每个着色器时钟= 466.560 GFLOPS。
这正好是规格中报告的GFLOPS的一半。那我哪里出问题了?
编辑:在Robert指向CUDA编程指南的指针(该指南说8MAD/着色器时钟可以在GT200 SM中执行)之后,我不得不质疑在这个特定SM中延迟和吞吐量之间的关系。
有一个OP /4个SP周期的延迟(如前所述),因此每4个SP周期就有一个MAD,对吗?我们有8个SPs,因此在SM中,每4个SP循环就有8个MAD。
因为两个SP周期形成一个着色周期,所以我们留下了每2个着色时钟周期=> 8 MAD,每个着色时钟=> 4 MAD。
这与编程指南中的8MAD/着色器时钟不匹配。我又做错什么了?
发布于 2014-02-10 17:31:34
延迟和吞吐量不是一回事。
一个cc 1.xSM可以在每一个时钟周期上8次单精度浮点MAD运算。
这是正确的公式:
1296 MHz(cycle/s) * 30 SM * (8 SP/SM * 2 flop/cycle per SP + 2 SFU/SM * 4 FPU/SFU * 1 flop/cycle per FPU)
= 622080 Mflop/s + 311040 Mflop/s = 933 GFlop/s single precision来自这里
编辑:您所指的4周期延迟是向SM发出的翘曲(即32个线程) MAD指令的延迟,而不是单个SP上单个MAD操作的延迟。每个SP中的FPU可以在每个时钟中产生一个MAD结果,而在一个SM中有8个SP,因此每个SM可以产生8个MAD结果。由于一个翘曲(32个线程) MAD指令需要32个MAD结果,它需要4个总时钟来完成该翘曲指令,就像SM中的SPs所发出的那样。
SP中的FPU每个时钟产生一个新的MAD结果。从教学问题的角度看,根本单位是经纱。因此,一条扭曲的MAD指令需要4个时钟来完成。
EDIT2:回答下面的问题。
前言: SFU中的FPU不能独立调度。只有当指令被调度到SFU时,它们才会发挥作用。每个SFU有4个FPU,一个SFU指令需要16个周期(因为有2个SFU/SM)才能完成翘曲。如果两个SFU中的所有4个FPU都得到充分利用,则在计算SFU指令时产生128 (16x4x2)触发器,周期为16个周期。这是添加到256 (16x2x8)总触发器,可以生成的“常规”MAD FPU在SM在同一时间(16个周期)。
你的问题似乎是解释所观察到的基准结果和案文中的这一陈述:
表三还显示,单精度浮点乘法的吞吐率为11.2个操作/时钟,这意味着可以同时向SP和SFU单元发出乘法。这表明每个SFU单元每个周期能够执行2次乘法,是映射到该单元的其他(更复杂的)指令吞吐量的两倍。
作为SFU中FPU的吞吐量或SFU中FPU的数量的指示。然而,您正在将基准测试数据与理论数字混为一谈。SFU有4个FPU,但这并不意味着对于任意算术或指令流,所有4个都是可以独立调度的。看到所有4个FPU在给定的周期中接受一个新的浮点指令,可能需要一个作者没有使用的特定指令序列。
https://stackoverflow.com/questions/21683837
复制相似问题