我从 CUDA by Example ,第9.4章中读到,当在GPU全局内存上使用原子操作不当时,程序的性能可能比纯粹执行时的性能差。在CPU上,因为内存访问争用。
在更糟糕的情况下,在GPU上执行的程序是高度序列化的,并且没有并行执行的线程,这就是单线程程序在CPU上运行的方式。所以关键问题是程序访问内存的速度有多快。
考虑到我提到的书中的示例,似乎CPU访问主机内存的速度比GPU访问设备上的全局内存要快。
是吗?是这样吗?或者在我刚刚描述的情况下是否还有其他因素会影响该计划的表现?答案 0 :(得分:5)
我认为你会略微误读。是的,它说GPU上的单线程代码通常比CPU慢。但这并不是因为原始内存带宽 - 这是因为在运行单个线程时CPU比GPU强大得多。例如,CPU具有流水线和复杂的分支预测以从内存预加载数据,而GPU被设计为在等待数据时将上下文切换到另一个线程。 CPU针对单线程情况进行了调整,同时针对许多线程调整了GPU。
如果你想知道哪个内存最快,请查看你的卡和主板的技术规格,但这不是本书所讨论的内容。