2013-03-03 29 views
1

我應該避免在opengl着色器中做過多的計算嗎?在opengl的着色器中應該做多少工作?

例如:需要每幀計算的東西,如照明。我應該如何進行計算,然後將結果發送給着色器,還是隻應在着色器中進行計算?

+5

我該如何記住它應該在GPU上完成的任何並行化操作,任何順序操作都應該在CPU上完成。 – Patashu 2013-03-03 23:55:50

+0

還要考慮有多種類型的着色器;通常在頂點着色器中發生一些照明,並且結果使用片段着色器。 – Dithermaster 2013-03-04 00:20:42

+5

這個問題太廣泛,無法回答。你在哪裏進行哪些計算取決於計算的內容,在其他地方做什麼的視覺效果等等。這不是你可以給出的一般建議。 – 2013-03-04 00:24:49

回答

5

GPU vs CPU是一個巨大的討論話題,正如@Nicol Bolas指出的那樣,問題是尋找一個通用的解決方案,其中多種因素會影響結果。

當考慮性能時,沒有什麼比擊敗分析。人類在預測其應用程序的性能影響方面出人意料地不好。如果在開發過程中您注意到您突然遇到GPU綁定,那麼您可能需要將一些工作卸載到CPU。另一方面,如果你受限於CPU,你可以選擇將更多的工作卸載到GPU上,即使這些工作與圖形無關。通過給GPU提供你可以做的事情(特別是如果它是與圖形相關的),你很可能會想要開始釋放你的CPU週期。

你可以閱讀更多的關於NVIDIAAMD開發者網站剖析的GPU或通過搜索GPU剖析教程/博客文章,如this

GPGPU已經成爲並行編程領域的主要討論話題,因爲GPU在設計時考慮了並行性。使用諸如SLI之類的技術將多個GPU添加到系統以進一步並行處理也是很常見的。這是@ Pataro的支持GPU並行處理的評論原則之一。如果您有興趣瞭解更多信息,您可以挖掘兩種更流行的基於GPU的並行編程平臺OpenCLCUDA

主題也是在以下職位討論多一點:

這也將是在讀了一個好主意GPU gems系列等出版物。你很可能會發現其他人分擔工作量的結果。