這篇文章介紹了 NVIDIA GPU 上異步復制的最佳實踐。要在應用程序中獲得高且一致的幀速率,請參閱所有高級 API 性能提示.
異步復制在完全獨立的硬件上運行,但您必須將其調度到單獨的隊列中。您可以考慮將異步副本轉換為異步計算作為性能策略。 NVIDIA 有專用的異步復制引擎。按性能改進的降序使用以下策略:
- 完全并行: Use async copy .
- 部分并行:通過驅動程序性能策略將同步副本轉換為異步計算。計算工作負載與圖形工作負載重疊。
- 沒有平行性:執行復制和圖形工作的串行執行。
- 負比例:將同步副本轉換為異步計算,但由于 SOL 沖突,需要更長的時間。
部分并行性要求開發人員創建和管理一個單獨的拷貝隊列,這需要隔離和可能的調度復雜性。在這種情況下,將同步副本轉換為異步計算比異步副本更值得。但是,任何不能轉換為異步計算的工作也不能轉換為異步副本,反之亦然。
推薦
- 將復制工作放入異步復制隊列,以使用 NVIDIA RTX 專用異步復制引擎來加速和并行化復制工作。
- 如果同步復制隊列在技術上過于復雜,請將復制工作轉換為異步計算工作,而不是異步復制。
- 在異步復制隊列上使用
updateTileMappings
,具有足夠的延遲以覆蓋可變的更新成本。這降低了與更新關鍵的直接和異步計算隊列相關的成本
不推薦
- 不要忘記使用 fences / semaphores 來調度圖形隊列的異步復制工作,這會創建競爭條件。
- 盡量減少圍欄的數量,以避免不必要的空轉。
- 不要將工作放在復制隊列上,以便立即或很快使用,因為復制隊列不僅與圖形隊列串行運行,而且會產生切換引擎的開銷。
- 不要將本地 GPU 副本移動到異步復制隊列上,因為由此產生的開銷可能會使其不值得。
- 不要使用需要 GPU 帶寬飽和的異步拷貝,除非您有足夠的時間覆蓋這些周期。異步復制引擎通常是為使 PCIE 帶寬飽和而構建的,但如果有足夠的時間來支付這些速度下的傳輸成本,則可以將其用作通用復制引擎。

致謝
感謝帕特里克·尼爾、艾倫·沃爾夫和邁克·墨菲的幫助 p 建議和審查本職位。
?