【问题标题】:Why cuFFT is "slow" on K40?为什么 cuFFT 在 K40 上“慢”?
【发布时间】:2016-03-22 11:15:42
【问题描述】:

我在 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 库有限制吗?也许是一些缓存动机......

【问题讨论】:

  • 内存带宽限制?我怀疑 FFT 是否有足够的 FLOP 每个内存事务来达到峰值算术吞吐量。
  • 正如 talonmies 所指出的,认为所有代码都受计算限制是一种常见的误解。事实上,大多数现存的 HPC 代码都受到内存带宽的限制。因此,GPU 的计算限制仅作为计算受限代码的性能预测器相关。如果代码受内存限制,那么 2 个 GPU 的内存带宽比将是一个更相关的预测指标。如果代码有时受计算限制,有时受内存限制,那么实际的预测变量可能是带宽限制和相关 GPU 的计算限制的比率组合。
  • @RobertCrovella:我猜 GTX780 是双精度算术限制的,而 K40 是内存带宽限制的(它们的内存带宽大致相同,不考虑 ECC 对 K40 的作用) )
  • 是的,同意,所以除了我的“比率”声明之外,您还可以说您可能无法使用单个指标来比较一个 GPU 与下一个 GPU 的另一个原因是限制因素可能会从一个 GPU 更改为下一个。我想这可能隐含在您的原始评论中。显然,这也可能取决于我们谈论的是float 还是double FFT——尽管这个问题是double 特有的。
  • 感谢大家的回答

标签: cuda fft cufft


【解决方案1】:

非常简短的回答是,GTX 780 上的双精度 FFT 很可能是算术指令吞吐量有限的,但同样的 FFT 操作是 Tesla K40 上的内存带宽有限。

略长一点的答案是,K40 的峰值内存带宽约为 288 Gb/s,对于 IEEE 754 float64 等 8 字节类型,峰值内存带宽为 36 Gwords/s。 FFT 的算术吞吐量将限制为它可以为该内存吞吐量执行的 FLOP 数量。达到峰值双 FLOP/s 将需要每个内存事务接近 40 个双精度操作。显然,FFT 在算术上不够密集,结果是峰值算术吞吐量要低得多。

在 GTX 780 上,其内存带宽与 K40 大致相同,但峰值双精度吞吐量低约 8 倍,似乎可以在可用内存带宽下更接近算术峰值。

【讨论】:

    猜你喜欢
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 2016-04-19
    • 2010-10-29
    • 2010-11-12
    • 2011-12-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多