Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Cuda 为什么cuFFT是;“慢”;在K40上?_Cuda_Fft_Cufft - Fatal编程技术网

Cuda 为什么cuFFT是;“慢”;在K40上?

Cuda 为什么cuFFT是;“慢”;在K40上?,cuda,fft,cufft,Cuda,Fft,Cufft,我比较了GTX 780和特斯拉K40在双精度模式下的简单3D袖口程序 在GTX 780上,我测得约85 Gflops,而在K40上,我测得约160 Gflops。这些结果让我困惑:GTX 780 ha 166 Gflops的峰值理论性能,而K40的峰值理论性能为1.4 Tflops K40上cuFFT的有效性能与理论峰值性能相差甚远,这一事实也来自Nvidia at.创建的图表 有人能解释一下为什么会这样吗?库夫特图书馆有限制吗?可能是一些缓存动机…非常简短的回答是,GTX 780上的双精度FF

我比较了GTX 780和特斯拉K40在双精度模式下的简单3D袖口程序

在GTX 780上,我测得约85 Gflops,而在K40上,我测得约160 Gflops。这些结果让我困惑:GTX 780 ha 166 Gflops的峰值理论性能,而K40的峰值理论性能为1.4 Tflops

K40上cuFFT的有效性能与理论峰值性能相差甚远,这一事实也来自Nvidia at.创建的图表


有人能解释一下为什么会这样吗?库夫特图书馆有限制吗?可能是一些缓存动机…

非常简短的回答是,GTX 780上的双精度FFT很可能是算术指令吞吐量受限的,但相同的FFT操作在特斯拉K40上是内存带宽受限的

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


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

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