2012-07-12 107 views
3

我從CUDA讀取由實施例,章節9.4,即在GPU全局存儲器使用的原子操作時不正確,程序的性能可能比當在CPU純粹執行,因爲存儲器存取爭用的,會更糟。CUDA,全局內存或主機內存哪個更快?

最糟糕的情況是,在GPU上執行的程序是高度序列化的,沒有線程並行執行,這只是單線程程序在CPU上運行的方式。所以關鍵的問題是程序訪問內存的速度有多快。

考慮到我提到的書中的例子,CPU似乎比GPU訪問設備上的全局內存更快地訪問主機內存。

是這樣嗎?還是在我剛剛描述的情況下還有其他因素影響了節目的表現?

+1

我想你應該提供更多的信息,因爲這個問題是開放的。你能提供書中的示例代碼嗎? FWIW,Kepler GPU上的原子操作比Fermi GPU更快,特別是在許多線程原子地更新相同地址的昂貴情況下。這本書已經在GPU年代已經很老了...... – harrism 2012-07-12 03:10:43

+0

也許我不應該提到'原子操作'...我只是想知道GPU如何運行與CPU不同的單線程代碼,以及性能的差異。所以我認爲下面的答案很好地解釋了我所要求的。 – 2012-07-12 14:46:26

回答

5

我認爲你有點誤解。是的,這是說GPU上的單線程代碼通常比CPU上的代碼慢。但這並不是因爲原始內存帶寬 - 這是因爲CPU在運行單線程時比GPU更強大。例如,CPU具有流水線和複雜的分支預測來預加載內存中的數據,而GPU則用於在等待數據時將上下文切換到另一個線程。 CPU針對單線程情況進行了調整,而GPU針對多個線程進行了調整。

如果您想知道哪個內存最快,請查看您的卡和主板的技術規格,但這本書並不真正在談論什麼。