GPU性能取决于元素数量(problem_size)

时间:2016-07-07 10:10:29

标签: performance cuda gpu

我正在使用CUDA开发计算流体动力学(CFD)代码。由于我针对不同的问题规模对单个Tesla K40 GPU(与Intel Xeon E5 v2 CPU相比)进行了一些加速测试,因此GPU通过增加问题大小显示出更高的加速。例如,对于约100万个元素,我的速度提高了约1.5倍,而对于1000万个元素,我的速度提高了约11倍。

我不知道理论上究竟是什么导致更大问题的更高性能?实际上,这也是我在GPU上运行的许多科学(尤其是流体力学)应用程序中看到的情况。 (我想知道内核开销,延迟等是否会受到影响?)

感谢您的回答或评论!

PS:通过加速,我的意思是GPU代码的执行时间与CPU版本的执行时间的比率。实际上,我增加了两个版本中的问题大小(当然在每个比较测试中都应用相同的问题大小)并重新计算相应问题大小的加速比。

1 个答案:

答案 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

表示

  1. 对于足够大的数据元素(> 100M),GPU速度接近37.125x的CPU速度;
  2. 恒定开销时间等于在CPU上处理0.640M元素的时间。