更糟糕的GPU执行几个块的更好性能的解释

时间:2015-05-27 11:08:51

标签: performance cuda

我有两个GPU,我正在比较它们与运行遗传算法的CPU之间的加速比。

我在CUDA上的实现使用主从方法,即群体中的每个人都与其他人并行运行。人口众多,意味着更多的块运行,最好的GPU(GTX660)比另一个(820M)快得多,但是运行小型的我用820M获得了更好的性能。

在CUDA C编程指南中,它说:

  

隐藏L时钟延迟所需的指令数   周期取决于这些指令的相应吞吐量(参见算术   各种算术指令吞吐量的说明);假设最大值   所有指令的吞吐量都是:

     

L表示计算能力2.0的设备,因为多处理器发出一条指令   如计算中所述,每次经过两个时钟周期两次经线   能力2.x,

     

2L用于计算能力2.1的设备,因为多处理器发出一对   每次扭曲两个时钟周期的指令,一次两个经线,如中所述   计算能力2.x,

     

8L用于计算能力3.x的设备,因为多处理器发出一对   每次经过一个时钟周期的指令,一次四次经线,如下所述   计算能力3.x。

     

5.2.3多处理器级别

这是我要找的答案吗?由于GTX660具有3.x的计算能力,因此与820M相比,我需要更多的warp运行(更大的人口)来隐藏延迟。

重要的是要注意我在此测试中使用不同的计算机,这可能是另一个原因......

提前致谢

1 个答案:

答案 0 :(得分:-1)

很难说没有查看算法,但我无法想到一个好的理由,为什么写得好的算法在820米上会比gtx 660更快。

维基百科的GFlops评级为820米,分别为276-366,内存带宽为16GB / s。 gtx 660具有1881 GFlops FMA和144GB / s带宽。我不知道任何可以解释这种差异的架构变化。

我建议比较结果1到1并确保它们都产生相同的结果。如果是这种情况,我会仔细浏览每个架构的调整指南并进行调整。

820M: http://docs.nvidia.com/cuda/maxwell-tuning-guide/#axzz3bL3OfJ00

660: http://docs.nvidia.com/cuda/kepler-tuning-guide/#axzz3bL3OfJ00

调整kepler时要记住的主要事情是默认情况下不会在L1中缓存全局内存访问。

祝你好运。