這篇文章介紹了 NVIDIA GPUs 上命令緩沖區(qū)的最佳實踐。要在應用程序中獲得高且一致的幀速率,請參閱所有高級 API 性能提示。
命令緩沖區(qū)是從 CPU 發(fā)送要在 GPU 上執(zhí)行的命令的主要機制。通過遵循本文列出的最佳實踐,您可以通過最大化并行性、避免瓶頸和減少 GPU 上的空閑時間,在 CPU 和 GPU 上實現性能提升。
推薦
接受您負責實現和控制 GPU / CPU 并行性的事實。
向命令列表提交工作不會啟動 GPU 上的任何工作。
對ExecuteCommandList的調用最終在 GPU 上開始工作。
在多個線程和內核上并行并均勻地將工作記錄到多個命令列表中。
錄制命令是一項 CPU 密集型操作,沒有驅動程序線程來拯救。
命令列表不是自由線程,因此并行工作提交意味著提交多個命令列表。
請注意,設置和重置命令列表會帶來成本。
為了高效地提交并行工作,您仍然需要合理數量的命令列表。
圍欄出于各種原因(多個命令隊列、拾取查詢結果等)強制拆分命令列表。
嘗試將目標設定為每幀 5-10 次ExecuteCommandList調用,并進行足夠的 GPU 工作,以隱藏每次ExecuteCommandList調用的操作系統(tǒng)調度開銷。
在上一次ExecuteCommandList調用之后,操作系統(tǒng)需要 50-80 微秒來安排命令列表。如果調用中的命令列表執(zhí)行速度快于此,則硬件隊列中存在氣泡。
使用GPUView檢查氣泡。
您可以將 3D 隊列上的圖形或計算工作與專用異步計算隊列上的計算工作重疊。
請記住,即使對于理論上可以與其他圖形或計算任務并行運行的計算任務, GPU 上并行工作的實際調度細節(jié)也可能不會產生期望的結果。
注意哪些異步計算和圖形工作負載可以一起調度。使用圍欄將正確的工作負載配對。
使用ExecuteIndirect靈活性最大限度地將 CPU 工作卸載到 GPU 并減少 CPU – GPU 同步點。
請使用ExecuteIndirect將場景消隱系統(tǒng)移植到 GPU 。
使用ExecuteIndirect計數緩沖區(qū)來控制命令的數量,而不是發(fā)出最大數量的命令并單獨預測未使用的命令。
NVIDIA 在ExecuteIndirect的Vulkan下為ExecuteIndirect提供附加功能
不推薦
幀描述符堆中的 CBV / SRV / UAV 描述符或 2K 采樣器不要超過 100 萬個。
不要阻止ExecuteCommandList呼叫。
ExecuteCommandList打電話可能會很貴。同時,可以在其他線程上記錄新命令。
每個命令隊列都可以使用自己的線程來提交ExecuteCommandList。
不要只在幾個命令列表中記錄所有內容或大型場景部分。這限制了您充分使用所有 CPU 內核的能力。
此外,構建幾個大的命令列表意味著您可能會發(fā)現很難讓 GPU 保持空閑狀態(tài)。
不要只在錄制完所有內容后才提交。您可能會浪費使 GPU 與其他命令列表的錄制并行工作的機會。
不要期望大量的列表重用。
在對象可見性等方面,每幀通常有許多更改。
后處理可能是一個例外。
不要經常混合使用繪圖、分派和復制命令。
嘗試將所有繪制命令組合在一起,并將命令分派到一起,依此類推。
在同一隊列上頻繁混合不同類型的工作可能會導致管道排水。
不要創(chuàng)建太多線程或太多命令列表。
太多的線程超額訂閱 CPU 資源,而太多的命令列表可能會積累太多的開銷。
關于作者
Wessam Bahnassi 在 3D 引擎設計和優(yōu)化方面有 20 年的經驗。他最新發(fā)布的游戲包括《蝙蝠俠:阿卡姆騎士》和他自己的 120-FPS PSVR 太空射擊游戲超空。他是 ShaderX / GPU Pro / GPU Zen 系列書籍的撰稿人和章節(jié)編輯。他目前在 NVIDIA 的工作包括進行優(yōu)化,并為該公司的幾個很酷的研究項目做出貢獻。
審核編輯:郭婷
-
cpu
+關注
關注
68文章
11052瀏覽量
216244 -
NVIDIA
+關注
關注
14文章
5274瀏覽量
105907
發(fā)布評論請先 登錄
FX3 Socket緩沖區(qū)切換的最大時間是多少?
在傳輸DMA通道中的所有緩沖區(qū)后,DMA標志(就緒和部分)被卡住了是怎么回事?
求助,關于3014的緩沖區(qū)設置疑問求解
請問如何在Linux中使用幀緩沖區(qū)更新epdc顯示?
FreeRTOS進階使用之流緩沖區(qū):高效處理字節(jié)流的秘密武器
L9663如何使用上行緩沖區(qū)發(fā)送同步脈沖?
緩沖區(qū)溢出漏洞的原理、成因、類型及最佳防范實踐(借助Perforce 的Klocwork/Hleix QAC等靜態(tài)代碼分析工具)

RTOS的流緩沖區(qū)機制解析

AMD Zen 4處理器悄然禁用循環(huán)緩沖區(qū)
分享一個嵌入式通用FIFO環(huán)形緩沖區(qū)實現庫

內存緩沖區(qū)和內存的關系
單片機中的幾種環(huán)形緩沖區(qū)的分析和實現

評論