• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    圖形/仿真

    高級 API 性能:命令緩沖區

    這篇文章介紹了 NVIDIA GPU s 上命令緩沖區的最佳實踐。要在應用程序中獲得高且一致的幀速率,請參閱所有高級 API 性能提示.

    命令緩沖區是從 CPU 發送要在 GPU 上執行的命令的主要機制。通過遵循本文列出的最佳實踐,您可以通過最大化并行性、避免瓶頸和減少 GPU 上的空閑時間,在 CPU 和 GPU 上實現性能提升。

    推薦

    • 接受您負責實現和控制 GPU / CPU 并行性的事實。
      • 向命令列表提交工作不會啟動 GPU 上的任何工作。
      • ExecuteCommandList的調用最終在 GPU 上開始工作。
    • 在多個線程和內核上并行并均勻地將工作記錄到多個命令列表中。
      • 錄制命令是一項 CPU 密集型操作,沒有驅動程序線程來拯救。
      • 命令列表不是自由線程,因此并行工作提交意味著提交多個命令列表。
    • 請注意,設置和重置命令列表會帶來成本。
      • 為了高效地提交并行工作,您仍然需要合理數量的命令列表。
      • 圍欄出于各種原因(多個命令隊列、拾取查詢結果等)強制拆分命令列表。
    • 嘗試將目標設定為每幀 5-10 次ExecuteCommandList調用,并進行足夠的 GPU 工作,以隱藏每次ExecuteCommandList調用的操作系統調度開銷。
      • 在上一次ExecuteCommandList調用之后,操作系統需要 50-80 微秒來安排命令列表。如果調用中的命令列表執行速度快于此,則硬件隊列中存在氣泡。
      • 使用GPUView檢查氣泡。
    • 您可以將 3D 隊列上的圖形或計算工作與專用異步計算隊列上的計算工作重疊。
      • 請記住,即使對于理論上可以與其他圖形或計算任務并行運行的計算任務, GPU 上并行工作的實際調度細節也可能不會產生期望的結果。
    • 注意哪些異步計算和圖形工作負載可以一起調度。使用圍欄將正確的工作負載配對。
    • 使用ExecuteIndirect靈活性最大限度地將 CPU 工作卸載到 GPU 并減少 CPU – GPU 同步點。
      • 請使用ExecuteIndirect將場景消隱系統移植到 GPU 。
      • 使用ExecuteIndirect計數緩沖區來控制命令的數量,而不是發出最大數量的命令并單獨預測未使用的命令。
      • NVIDIA 在ExecuteIndirectVulkan下為ExecuteIndirect提供附加功能

    不推薦

    • 幀描述符堆中的 CBV / SRV / UAV 描述符或 2K 采樣器不要超過 100 萬個。
    • 不要阻止ExecuteCommandList呼叫。
      • ExecuteCommandList打電話可能會很貴。同時,可以在其他線程上記錄新命令。
      • 每個命令隊列都可以使用自己的線程來提交ExecuteCommandList
    • 不要只在幾個命令列表中記錄所有內容或大型場景部分。這限制了您充分使用所有 CPU 內核的能力。
      • 此外,構建幾個大的命令列表意味著您可能會發現很難讓 GPU 保持空閑狀態。
    • 不要只在錄制完所有內容后才提交。您可能會浪費使 GPU 與其他命令列表的錄制并行工作的機會。
    • 不要期望大量的列表重用。
      • 在對象可見性等方面,每幀通常有許多更改。
      • 后處理可能是一個例外。
    • 不要經常混合使用繪圖、分派和復制命令。
      • 嘗試將所有繪制命令組合在一起,并將命令分派到一起,依此類推。
      • 在同一隊列上頻繁混合不同類型的工作可能會導致管道排水。
    • 不要創建太多線程或太多命令列表。
      • 太多的線程超額訂閱 CPU 資源,而太多的命令列表可能會積累太多的開銷。
    ?
    ?

    ?

    0

    標簽

    人人超碰97caoporen国产