我正在用CUDA开发计算流体力学(CFD)代码。由于我正在单个Tesla K40 GPU (与Intel Xeon E5 v2 CPU相比)上进行不同问题大小的加速测试,GPU通过增加问题大小显示出更高的加速比。例如,1百万元素的加速比为1.5倍,而1千万元素的加速比为11倍。
我不知道理论上是什么导致了大问题的高性能?实际上,这也是我在GPU上运行的许多科学(特别是流体力学)应用程序中看到的情况。(我想知道内核开销、延迟等是否会受到影响?)
谢谢您的回复或评论!
PS:所谓加速,是指GPU代码的执行时间与CPU版本的执行时间的比率。实际上,我增加了两个版本中的问题大小(当然,在每个比较测试中都适用相同的问题大小),并重新计算相应问题大小的加速比。
发布于 2016-07-07 12:22:16
原因是运行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
这意味着
https://stackoverflow.com/questions/38242826
复制相似问题