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

    高級 API 性能:調試

    ?

    NVIDIA 提供了大量的圖形調試工具,包括 NVIDIA Nsight System 用于 CPU 調試,Nsight Graphics 用于 GPU 調試。而 Nsight Aftermath 則可用于分析崩潰轉儲文件。

    推薦

    • 始終檢查驗證層,并確保它們不會輸出任何錯誤。
    • 使用 Nsight Aftermath 進行詳細的 DirectX 12 或 Vulkan GPU 異常調試。
      • 使用 Nsight Aftermath Monitor 是一種簡單的入門方法,無需集成代碼。
      • 如需進一步控制 GPU 崩潰轉儲功能,請考慮使用 Aftermath SDK 將崩潰轉儲功能集成到您自己的代碼中。
        • 由于沒有相關的運行時成本,因此始終可以啟用崩潰轉儲生成。正如稍后指出的,調試檢查點可能會產生可測量的 CPU 開銷,因此不應用于交付應用程序。
        • 您可以使用 API 中提供的回調函數將崩潰轉儲保存到本地磁盤,或將其推送到云端。
      • 有關更多信息,請參閱 Nsight Aftermath SDK 產品頁面。
    • 使用調試檢查點來隔離問題。
      • 這些 API 支持在 GPU 命令流中插入檢查點,從而將崩潰縮小到命令流的某些子部分。
      • 使用 Nsight Aftermath 支持的 API。想要了解更多信息和示例,請訪問 NVIDIA/nsight-aftermath-samples GitHub 存儲庫。
      • 或者,使用 DirectX 12 跨供應商解決方案:
        • 使用 ID3D12GraphicsCommandList2::WriteBufferImmediateDRED
        • 不支持將其與 Nsight Aftermath 結合使用,因此最好避免混合使用。
      • 在引擎中添加運行時標志以切換此功能。
        • 這些標記并非免費,并且會產生相關的運行時成本(包括序列化 GPU、CPU 調用的開銷以及捕獲調用堆棧的時間)。
        • 默認情況下,保持啟用可能會導致嚴重的性能損失。
        • 請參閱我們的不推薦部分。
    • 使用調試信息構建著色器。
      • 使用/Zi 進行編譯,以將調試信息嵌入著色器二進制文件。
      • 這在使用 NVIDIA Nsight Graphics 等調試工具時非常有用。
      • 此外,Nsight Aftermath 可以使用此信息為您提供源級 GPU 崩潰信息。
    • 使用 Nsight Aftermath 崩潰轉儲文件識別崩潰期間發生的錯誤類型。
      • 設備掛起:
        • 由于單個命令列表的執行時間超過幾秒鐘,因此可能會出現這些情況。
        • 在驅動程序和 GPU (TDR) 沒有明顯反饋的情況下,Microsoft Windows 會在幾秒鐘后終止驅動程序。
        • 在極端工作負載(大規模像素過度繪制或光線追蹤加速結構降低)的情況下也會發生這種情況。
      • 分頁錯誤
        • 這些問題是由無效的內存訪問引起的:越界讀取/寫入或無效的資源。
      • 有關更多信息,請參閱 如何設置和檢查 GPU 崩潰轉儲
    • 針對圖形和計算相關問題的通用調試建議:
      • 在 GPU 訪問數據時,檢查所有引用內存是否始終有效且正確。
      • 檢查描述符是否指向已完全分配和初始化的正確資源。
      • 檢查數據讀取和寫入是否越界。
      • 使用 Nsight Aftermath 的調試檢查點和 GPU 崩潰轉儲功能縮小崩潰位置。
      • DirectX 12:調試層可以在這里提供幫助,但對于這些問題,必須啟用基于 GPU 的驗證,這通常會使應用程序在復雜場景中的運行速度極慢。它在單元測試或回歸測試中仍然有用。
    • 針對 NVIDIA RTX 相關問題的通用調試建議:
      • 檢查輸入的頂點或索引數據是否均有效。
        • 無效的索引可能會導致 GPU 構建器核函數崩潰。
        • 無效的頂點可能會影響加速結構,并導致性能極其緩慢。
      • 將光柵化程序中可用的三角形或三角形斷開連接的技巧無法按預期在加速樹中發揮作用,因此可能會導致大問題。檢查是否未使用此類技巧,例如斷開連接或刪除幾何圖形。只能使用有效的幾何圖形。
      • 在構建器或光線追蹤內核引用數據時,檢查內存是否仍然有效。
      • 檢查光線追蹤內核使用的所有紋理和緩沖區是否都有效。
      • 檢查描述符是否正確,以及著色器綁定表是否有效。
      • 調試檢查點對于調試光線追蹤工作負載沒有用,因為 RT 內核中發生的間接可能會觸及數千個著色器排列。它最多可以判斷崩潰是在構建器還是光線追蹤內核中發生的。
      • 而是使用 Nsight Aftermath 崩潰調試來大致了解崩潰情況:
        • 分頁錯誤:與內存相關的問題,通常是越界讀取 – 寫入或嘗試訪問已刪除或尚未復制到 GPU 的資源。
        • GPU 掛起 (TDR):無限循環、過于復雜的著色或過多的光線。
      • 提供一種簡化代碼和綁定要求的方法可能很有用,例如禁用紋理或減少著色器排列。
        • 例如,讓調試視圖僅顯示質心(無著色器綁定表要求)。
          • 檢查外觀是否損壞的幾何圖形或由于三角形數據損壞而導致性能嚴重下降的點。
          • 在僅采用光線追蹤的視圖中直觀驗證動態源的輸出,例如變形的幾何圖形或蒙皮網格。
        • 完全禁用動態幾何圖形也有助于隔離此類問題。
    • 在應用程序中為以下內容添加標志,以簡化調試:
      • 在隊列級別序列化 GPU/CPU.
      • 在命令列表級別序列化 GPU/CPU.
      • 禁用異步計算。
      • 禁用異步復制。
      • 在命令列表(NULL UAV/內存屏障)中添加計算、分配和復制調用之間的完整屏障。
      • 采取其他措施消除并行性。當 GPU 同時運行多個工作負載時,很難進行調試并找出問題的根源。
      • 請勿默認啟用這些建議。它們應嚴格僅限調試標志。減少并行性會顯著降低性能。

    不推薦

    • 使用過多的調試檢查點。
      • 它們的 CPU 和 GPU 性能成本不容忽略。
      • 小心謹慎。每幀瞄準 100 歐元,最好更少。
      • 最好不要為最終用戶(僅限開發者或 QA)使用它們,或者在檢測到 GPU 掛起時啟用它們。您還可以讓最終用戶選擇切換它們。
    • 假設 CPU 調用堆棧會告訴您有關 GPU 問題的任何信息。
      • 當調用堆棧指向驅動程序時崩潰,通常表現為隨機圖形 API 調用因內部設備丟失事件而失敗。
      • 使用 Nsight Aftermath 崩潰轉儲文件或調試檢查點來確定故障發生的位置。
    • 在單臺機器上進行測試(不包括硬件性能不佳的影響)。
      • 內存(CPU 或 GPU)損壞、超頻和冷卻不良都會導致隨機錯誤。Nsight Aftermath 無法將這些錯誤與有效錯誤區分開來。
      • 一個明顯的跡象可能是,崩潰是隨機發生的,在單臺機器上的 GPU 上沒有任何模式,而在另一臺具有類似規格的機器上沒有任何模式。
      • 嘗試在多臺具有相似硬件、軟件和驅動版本的計算機上驗證結果。
    • 允許用戶運行非常過時的 NVIDIA 驅動
      • 過時的驅動程序可能會有意想不到的行為,并且更難以從中獲得可靠的崩潰轉儲文件。
      • 找到可靠運行的驅動程序版本。顯示一個彈出窗口,其中顯示當驅動程序版本早于該版本時,驅動程序已過時。不要阻止用戶運行應用程序或游戲,但不要阻止他們這樣做,因為這會導致系統不穩定。

    致謝

    感謝 Patrick Neill、Jeffrey Kiel、Justin Kim、Andrew Allan 和 Louis Bavoil 在本文中的幫助。

    ?

    0

    標簽

    人人超碰97caoporen国产