• <xmp id="om0om">
  • <table id="om0om"><noscript id="om0om"></noscript></table>
  • 3 月 19 日下午 2 點,鎖定 NVIDIA AI 網絡中文專場。立即注冊觀看
    內容創建/渲染

    高級 API 性能: CPU

    本文介紹了使用 NVIDIA GPU 時的 CPU 最佳實踐。要在應用程序中獲得高且一致的幀速率,請參閱高級API 性能提示

    要從 NVIDIA GPU 中獲得最佳性能,請將其與 CPU 上的高效工作委派配對。幀速率上限、卡頓和其他低于標準的應用程序性能事件通常可以追溯到 CPU 上的瓶頸。使用以下技巧來了解你應該做什么以及應該避免什么。

    多線程和工作負載平衡

    再多的 GPU 工作優化也無法克服 CPU 瓶頸。均勻平衡所有線程的工作,以獲得最佳效果。

    推薦

    • 平衡所有線程之間的命令列表創建和記錄。 D3D12 和 Vulkan 的主要設計理念是使游戲引擎能夠在多個 CPU 核心之間分配圖形工作負載。
    • 關閉并重置錄制工作線程上的命令列表。

    不推薦

    • CPU 密集型命令列表不應記錄在其上ExecuteCommandLists被調用。典型的ExecuteCommandLists在給定幀的命令列表記錄之后被序列化。將其與所有其他命令列表記錄線程保持在一個單獨的線程上,可以使后續的幀 CPU 工作從不那么復雜的負載平衡開始。
    • 細粒度查詢的使用增加了 CPU 開銷,例如在繪制調用的計時方面。

    執行命令列表和多個命令隊列

    ExecuteCommandLists向 GPU 提交一個命令列表數組( ECL )以供執行。 NVIDIA 硬件支持多個命令隊列以并行化圖形工作,使圖形計算或計算工作能夠同時執行。

    推薦

    • 減少ExecuteCommandLists盡可能多地打電話。
    • 在多個隊列上執行命令列表時,請考慮同步所增加的開銷。信號或等待圍欄呼叫越少, CPU 就越好。這應該與最大化 GPU 上的工作負載重疊的能力相平衡。

    資源分配和銷毀

    創建和銷毀緩沖區、紋理和著色器是高效計算機圖形的基礎。

    推薦

    • 使用專用線程創建資源,以避免隱藏的操作系統成本和阻塞幀渲染,因為這可能會導致昂貴的操作系統分頁工作。
    • 免費的線程資源創建也可能是異步復制隊列上傳的自然選擇,這將使完全免費的線程數據上傳到vidmem用于新分配的資源。以這種方式構建上傳避免了為幀渲染添加隱藏的開銷。但是,請注意,額外的隊列和隊列之間的同步也可能增加 CPU 開銷。

    構建光線跟蹤加速度結構

    光線跟蹤加速結構是組織場景的幾何信息以優化光線和場景對象之間的相交測試的數據結構。BuildRaytracingAccelerationStructure使用場景幾何體執行加速度結構的初始構造。

    推薦

    • 使用時在單獨的線程上錄制BuildRaytracingAccelerationStructure,優選在異步計算隊列上進行調度。這個 API 是 CPU 密集型的,可以控制命令列表記錄時間
    • 要警惕與完整構建的幾何復雜性直接相關的 CPU 開銷。重建應該是相對固定的開銷。
    • 請注意與FAST_TRACE構建。

    有關詳細信息,請參閱Best Practices: Using NVIDIA RTX Ray Tracing.

    CreatePipelineState 和 CreateStateObject

    CreatePipelineState用于創建渲染管道狀態對象,該對象定義圖形管道的配置。管道狀態對象封裝執行圖形命令所需的所有狀態,例如輸入布局、著色器程序、混合狀態、深度模具狀態和光柵化器狀態。

    CreateStateObject使開發人員能夠創建一個狀態對象,將圖形管道的狀態封裝為一個整體。狀態對象包括使用創建的管道狀態對象CreatePipelineState,以及其他狀態信息,如視口、剪刀形矩形和輸入布局。

    推薦

    • 使用AddToStateObject以將著色器代碼增量添加到現有光線跟蹤狀態對象,并避免不必要的 CPU 開銷。

    不推薦

    • 避免不必要地創建管道狀態對象和光線跟蹤對象。這些操作涉及著色器創建,這可能會消耗大量的 CPU 周期。著色器復雜性直接影響創建調用的復雜性。

    ?

    0

    標簽

    人人超碰97caoporen国产