圖形編程中的同步是指協調和控制并發操作,以確保渲染任務的正確和可預測執行。 CPU 和 GPU 之間的不正確同步可能導致性能下降、比賽條件和視覺偽影。
推薦
- 如果異步運行工作負載,請確保它們強調不同的 GPU 單元。例如,將帶寬繁重的任務與數學繁重的任務配對。也就是說,使用 z-prepass 和 BVH 構建或后處理。
- 始終驗證異步實現在不同的體系結構中是否更快。
- 異步工作可以屬于不同的框架。使用此技術可以幫助找到更好的配對工作負載。
- 等待并發出信號量/圍欄的絕對最小值。每一個過量的信號量/圍欄都可能在管道中引入一個氣泡。
- 使用 GPU 評測工具( NVIDIA Nsight Graphics 在 GPU trace 模式、 PIX 或 GPU View 中)查看工作重疊和圍欄在不拖延一個或另一個隊列的情況下配合得如何。
- 為了避免額外的同步和資源障礙,可以在計算隊列中進行異步復制/傳輸工作。
不推薦
- 避免創建不會使用的隊列。
- 每個額外的隊列都會增加處理的開銷。
- 由于操作系統調度程序的限制,除非啟用了硬件加速的 GPU 調度,否則多個異步計算隊列不會重疊。更多詳細信息,請參閱硬件加速的 GPU 調度。
- 盡可能避免微小的異步任務并將其分組。耗時< 0 . 2 毫秒的異步工作負載不太可能顯示出任何好處,因為這大約是解決硬件調度前圍欄問題的時間。
- 避免使用圍欄來同步隊列中的工作。根據規范,命令列表/緩沖區保證在命令隊列中按提交順序執行。
- 不應使用信號燈/圍欄代替資源屏障。它們要貴得多,而且支持不同的用途。
- 不要實施占用率低的工作負載,以使其與圖形隊列上的更多工作保持一致。 GPU 功能可能會發生變化,占用率低的工作可能會變成拖尾,拖尾另一個隊列。
?