我在双精度模式下对GTX 780和Tesla K40上的简单3D cuFFT程序进行了比较。
在GTX 780上我测量了大约85 Gflops,而在K40上我测量了大约160 Gflops。这些结果让我感到困惑:GTX 780 ha理论性能峰值为166 Gflops,而K40则为1.4 Tflops。
CuFFT对K40的有效性能与理论峰值性能相差甚远的事实也来自Nvidia在this link创建的图表。
有人可以向我解释为什么会这样吗? cuFFT库有限制吗?也许是一些缓存动机......
答案 0 :(得分:1)
非常简短的答案是,GTX 780上的双精度FFT最有可能是算术指令吞吐量受限,但同样的FFT操作是特斯拉K40上的内存带宽限制。
稍长的答案是K40的峰值存储器带宽约为288 Gb / s,对于8字节类型,如IEEE 754 float64,则为36 Gwords / s。 FFT的算术吞吐量将限于它可以为该存储器吞吐量执行的FLOP的数量。达到峰值双FLOP / s将需要每个内存事务接近40个双精度操作。显然,FFT在算术上不够密集,结果是峰值算术吞吐量低得多。
在与K40具有大约相同存储器带宽的GTX 780上,但峰值双精度吞吐量低约8倍,似乎可以在可用存储器带宽处接近算术峰值。