2015-10-17 111 views
2

讓我們假設遊戲開發者開發一個應用程序。因此,在編寫應用程序時,開發人員會編寫一些代碼段,這些代碼段應該轉到CPU,還有一些代碼段應該轉到GPU或由調度程序在運行時決定?CPU和麪向GPU的代碼有什麼區別?

+0

閱讀標籤說明前加入!這與嵌入式無關。正如它給出的是語言不可知的。 – Olaf

回答

4

CPU和GPU是不同的,經過優化可以做不同的事情。圖形處理器不那麼聰明,但大量更多的並行和執行大量的專業處理,而不是傳統的CPU更一般的處理。

GPU必須由CPU分配任務。沒有調度程序運行時間的可能性,因爲它們不同,可以有不同的指令。

+0

對於nVidia的PhysX,CPU和GPU之間的選擇可以由用戶通過控制面板進行選擇,包括自動設置,因此對於某些使用該設置的程序,可以在運行時進行選擇。 – rcgldr

+0

這很有趣......沒有理由說明爲什麼GPU上的任何事情都不能在CPU上完成...但是,儘管我對這種功能一無所知,但我不得不假設控制面板是什麼做的是翻轉一下,這樣某些操作/調用通過兩種不同的實現來實現,一種使用CPU,另一種使用GPU,但要清楚,但這些實際上是兩個基本不同的代碼位,而不是相同的代碼重新安排。 – Michael

+0

我唯一使用PhysX的遊戲總是選擇CPU,或者至少這是遊戲設置中顯示的內容(控制面板也有一個選項可以將當前設置顯示爲疊加層),所以我沒有多少遊戲實際上使用這個選項,但它在控制面板中。 – rcgldr

3

既然你已經標記了C,那麼讓我告訴你,你用C語言編寫的任何程序,使用GCC或任何編譯器進行編譯都是針對你的CPU。

如果您編寫代碼並使用常規編譯器進行編譯,但它不針對GPU執行,代碼將始終在CPU上執行。

您的圖形庫調用是由您的CPU「執行」,但面向圖形的調用(例如,繪製東西)由GPU操作。

此外,回答這取決於您正在執行的語言和程序。 CUDA和OpenCL或OpenGL計算着色器在GPU上執行。

所以基本上,你的代碼的所有程序執行,即在代碼中設置編譯器環境以渲染調用是由CPU完成的。

2

CPU和GPU非常不同,並且具有不同的編程模型和編程語言。您可以在GPU上使用C,並在GPU上使用OpenCL(或CUDA,如果您將自己限制爲Nvidia產品)。

您通常無法在GPU上運行任意C代碼。

GPU的編碼是痛苦的,你必須調整代碼到特定的硬件。

也見之類的工具PIPS4u & OpenACC