在CUDA中,全局内存和主机内存哪个更快?

3
我从《CUDA by Example》第9.4章中了解到,在GPU全局内存上不当地使用原子操作时,程序的性能可能比纯CPU执行时更差,因为存在内存访问争用。
在最坏的情况下,GPU上执行的程序高度串行化,没有线程并行执行,这与在CPU上运行单线程程序的方式相同。所以关键问题是程序访问内存的速度有多快。
考虑到我提到的书中的例子,似乎CPU访问主机内存比GPU访问设备上的全局内存更快。
是这样吗?还是还有其他因素影响了我刚才描述的情况下程序的性能?

1
我认为你应该提供更多信息,因为这个问题非常开放。你能提供书中的示例代码吗?顺便说一句,在Kepler GPU上原子操作要比在Fermi GPU上快得多,尤其是在许多线程同时以原子方式更新相同地址的情况下。那本书在GPU领域已经算是相当陈旧了... - harrism
也许我不应该提到“原子操作”……我只是想知道GPU如何以及性能上与CPU运行单线程代码的不同之处。因此,我认为下面的答案很好地解释了我的问题。 - lei_z
1个回答

5
我认为您有些误解。是的,它表明GPU上的单线程代码通常比CPU上的慢。但这不是因为原始内存带宽 - 而是因为在单线程运行时,CPU比GPU更强大。例如,CPU具有流水线和复杂的分支预测来预加载内存中的数据,而GPU设计用于在等待数据时切换到另一个线程。CPU针对单线程情况进行调整,而GPU则针对多个线程进行调整。
如果您想知道哪种内存最快,请查看您的显卡和主板的技术规格,但这并不是本书所讨论的重点。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接