我有两个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运行(更大的人口)来隐藏延迟。
重要的是要注意我在此测试中使用不同的计算机,这可能是另一个原因......
提前致谢
答案 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中缓存全局内存访问。
祝你好运。