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

    高級 API 性能:障礙

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

    為了在我們的硬件上獲得最佳性能,以下是在 DX12 或 Vulkan 中使用屏障時應該做和不應該做的事情。這是從DX12 注意事項更新的。

    推薦

    • 盡量減少使用障礙物和圍欄。任何障礙物或柵欄都會限制平行度。我已經看到冗余屏障和相關的等待空閑操作是 DX11 到 DX12 端口的主要性能問題。
      • DX11 驅動程序在減少障礙方面做得很好。在 DX12 下,您必須這樣做。
    • 確保始終使用最小的資源使用標志集。冗余標志可能會觸發冗余刷新和暫停,并不必要地降低游戲速度。同樣,我看到冗余或過于保守的屏障標志及其相關的等待空閑操作是 DX11 到 DX12 端口的主要性能問題。
      • 不要使用D3D12_RESOURCE_USAGE_GENERIC_READ,除非您確實需要在這些標志組合中設置的每個標志。
    • ID3D12CommandList::ResourceBarrier中指定最小目標集。添加虛假依賴項會增加冗余。
    • 在一次呼叫ID3D12CommandList::ResourceBarrier中分組障礙。這樣,可以選擇最壞的情況,而不是依次通過所有障礙。
    • 使用單個空到空的別名資源屏障,而不是多個(例如, 200 +資源到空的屏障)。在驅動程序中可能是相等的,處理所有這些數據可能會浪費 CPU 個周期。
    • 如有可能,使用分離式屏障。
      • 使用D3D12_RESOURCE_BARRIER_FLAG_BEGIN_ONLYD3D12_RESOURCE_BARRIER_FLAG_END_ONLY標志。這有助于驅動程序優化過渡工作負載的調度。
    • 使用圍欄向ExecuteCommandLists發送事件信號或跨越呼叫。

    不推薦

    • 不要插入多余的屏障:
      • D3D12_RESOURCE_STATE_PIXEL_SHADER_RESOURCED3D12_RESOURCE_STATE_RENDER_TARGET再到D3D12_RESOURCE_STATE_RENDER_TARGET的轉換是多余的,其間沒有任何draw調用。
      • 避免閱讀障礙。為所有后續讀取獲取處于正確狀態的資源。
    • 沒有充分的理由不要使用D3D12_RESOURCE_USAGE_GENERIC_READ
      • 對于從寫入狀態到讀取狀態的轉換,請確保轉換目標包含下一次寫入轉換之前所需的所有讀取狀態。這是通過組合讀取狀態標志從 API 完成的,在后續的ResourceBarrier調用中,最好是從讀取轉換為讀取。
    • 除非絕對需要,否則不要將D3D12_RESOURCE_STATE_COMMON狀態用于非初始狀態。D3D12_RESOURCE_STATE_COMMON是可升級到讀和寫狀態的狀態,因此它使驅動程序選擇最差的同步度量。
    ?
    0

    標簽

    人人超碰97caoporen国产