我正在使用CUDA开发计算流体动力学(CFD)代码。由于我针对不同的问题规模对单个Tesla K40 GPU(与Intel Xeon E5 v2 CPU相比)进行了一些加速测试,因此GPU通过增加问题大小显示出更高的加速。例如,对于约100万个元素,我的速度提高了约1.5倍,而对于1000万个元素,我的速度提高了约11倍。
我不知道理论上究竟是什么导致更大问题的更高性能?实际上,这也是我在GPU上运行的许多科学(尤其是流体力学)应用程序中看到的情况。 (我想知道内核开销,延迟等是否会受到影响?)
感谢您的回答或评论!
PS:通过加速,我的意思是GPU代码的执行时间与CPU版本的执行时间的比率。实际上,我增加了两个版本中的问题大小(当然在每个比较测试中都应用相同的问题大小)并重新计算相应问题大小的加速比。
答案 0 :(得分:1)
原因是运行GPU内核通常会带来恒定时间的开销(可能不是常数但我们可以考虑常量情况),例如内核启动开销,PCIe数据传输等。
假设这个恒定的GPU开销成本为t
秒,GPU速度为每秒g
百万个元素,CPU速度为每秒c
百万个元素。两种速度都是恒定的(如@havogt所示,可能不是真的)。 CPU上没有开销。你有方程式
(t + 1 / g) * 1.5 = 1 / c
(t + 10 / g) * 11 = 10 / c
然后你可以得到
g / c = 37.125
t = 0.640 / c
表示