2014-04-24 18 views
2

Maya promo video解釋了GPU緩存如何影響用戶使應用程序運行更快。在像Cinder這樣的框架中,我們重新繪製了每幀更新中我們想要在場景中的所有地理操作,並將其發送到視頻卡。所以我想從程序員的角度來看待GPU緩存背後的東西? OpenGL/DirectX API是這種技術的後盾?如何在GPU內存中「緩存」我的網格?什麼是來自OpenGL/DirectX程序員的「GPU Cache」?

+0

這可能指的是優化三角形網格用於後-T&L緩存局部性。在過去,這個緩存是一個相對較小的FIFO隊列,並且爲了實現最佳利用率,按照條帶順序排序頂點是必需的。這是更復雜的建模軟件可以完成的事情,但這些日子幾乎沒有關係。 –

回答

1

首先,Maya使用的「GPU緩存」術語 可能指的是簡單存儲在卡上的圖形數據 指的是優化Maya中與設備無關的存儲和渲染的網格。對於卡製造商來說,「GPU緩存」的概念是不同的(在這種情況下,它意味着更像L1或L2 CPU緩存)。

要回答你的最後一個問題:使用OpenGL術語,你通常會創建頂點緩衝對象(VBO's)。這些將數據存儲在卡上。然後,當你想繪製時,你可以簡單地指示卡片使用這些緩衝區。

這將避免將主(CPU)內存中的網格數據複製到圖形(GPU)內存中的開銷。如果您需要多次繪製網格而不更改網格數據,則表現會更好。

2

就我所知,在OpenGL或DirectX中沒有辦法直接指定將要在GPU緩存上進行什麼,將不會被存儲和跟蹤。然而,爲了充分利用緩存,應該遵循和維護的方法。其中一些包括:

  • 批,批,批。
  • 將數據直接上傳到GPU
  • 使網格中的頂點位置最大化的順序索引。
  • 保持狀態更改爲最小值。
  • 將着色器更改保持在最小值。
  • 保持紋理更改爲最小值。
  • 儘可能使用最大紋理壓縮。
  • 使用紋理映射儘可能(最大化紋理像素採樣地點)

同樣重要的是要記住,沒有一個統一的GPU緩存。有多個(頂點,紋理等)獨立緩存。

來源:

OpenGL SuperBible - Memory Bandwidth and Vertices

GPU Gems - Graphics Pipeline Performance

GDC 2012 - Optimizing DirectX Graphics