【问题标题】:GPUs performance depends on number of elements (problem_size)GPU 性能取决于元素数量 (problem_size)
【发布时间】:2016-11-09 14:47:00
【问题描述】:

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

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

感谢您的任何回答或评论!

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

【问题讨论】:

  • 相对于什么的加速?
  • 正如我所提到的;与 CPU 相比的加速。
  • 您应该提供更多详细信息。每个元素的速度如何?您获得相对性能提升是因为 GPU 在每个元素上变得更快(可能是由于隐藏延迟)还是因为 CPU 变得更慢(可能是缓存大小)。

标签: performance cuda gpu


【解决方案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 速度接近 CPU 速度的 37.125 倍;
  2. 恒定开销时间等于在 CPU 上处理 0.640M 元素的时间。

【讨论】:

  • 看起来很合理。谢谢!
猜你喜欢
  • 2019-07-14
  • 1970-01-01
  • 1970-01-01
  • 2015-06-04
  • 2019-07-11
  • 2019-11-29
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
相关资源
最近更新 更多