]]>11356用于直線 CUDA 圖形和其他性能增強的恒定時間啟動
http://www.open-lab.net/zh-cn/blog/constant-time-launch-for-straight-line-cuda-graphs-and-other-performance-enhancements/
Wed, 11 Sep 2024 08:11:14 +0000http://www.open-lab.net/zh-cn/blog/?p=11288Continued]]>CUDA Graphs 是一種將 GPU 運算定義為圖形(而非一系列流啟動)并將其批量處理的方法。CUDA Graph 將一組 CUDA 內核和其他 CUDA 運算分組在一起,并使用指定的依賴關系樹執行這些運算。它將與 CUDA 內核啟動和 CUDA API 調用相關的驅動程序活動結合起來,從而加快工作流程。它還可以執行與硬件加速的依賴關系,而不是在可能的情況下僅依賴 CUDA 流和事件。 CUDA 圖形對于 AI 框架尤為重要,因為它們使您能夠捕獲和回放一系列 CUDA 操作,從而降低 CPU 開銷并提高性能。借助最新的改進,您現在可以更好地利用 CUDA 圖形來加速 AI 工作負載。 在 CUDA 工具包 11.8 和 CUDA 工具包 12.6 以及隨附的驅動程序版本之間,NVIDIA 在幾個方面提高了 CUDA 圖形的性能: 在本文中,
]]>10600具有條件節點的 CUDA 圖的動態控制流
http://www.open-lab.net/zh-cn/blog/dynamic-control-flow-in-cuda-graphs-with-conditional-nodes/
Fri, 10 May 2024 07:40:58 +0000http://www.open-lab.net/zh-cn/blog/?p=10046Continued]]>CUDA 圖 可以顯著提高性能,因為驅動程序能夠使用任務和依賴關系的完整描述來優化執行。特別是在靜態工作流中,圖形可以提供難以置信的好處,其創建的開銷可以在多次連續啟動中分攤,從而提高整體性能。 然而,幾乎所有的問題都涉及某種形式的決策,這可能需要分解圖并將控制權返回給 CPU,以決定下一步要啟動哪些工作。像這樣分解工作會損害 CUDA 進行優化的能力,占用 CPU 資源,并增加每次圖形啟動的開銷。 從 CUDA 12.4 開始,CUDA Graphs 支持 條件節點,這使得圖形的部分能夠有條件地或重復地執行,而不需要將控制返回到 CPU。這釋放了 CPU 資源,使得更多的工作流能夠在單個圖形中表示,從而提高了計算效率。 條件節點有兩種風格: 條件節點是容器節點,類似于子圖節點,但節點中包含的圖的執行取決于條件變量的值。
]]>9194限制 CPU 線程以獲得更好的游戲性能
http://www.open-lab.net/zh-cn/blog/limiting-cpu-threads-for-better-game-performance/
Wed, 21 Feb 2024 05:06:21 +0000http://www.open-lab.net/zh-cn/blog/?p=8942Continued]]>許多 PC 游戲都圍繞 8 核游戲機進行設計,并假設其軟件線程系統在所有 PC 上都“正常工作”,尤其是在工作線程池中的線程數量方面。不久前,大多數 PC 的核心數量與游戲機相似時,這是一個合理的假設:CPU 的速度更快,性能只是擴展。 但近年來,CPU 格局發生了變化,現在有一個復雜的性能變量矩陣需要導航: 這種復雜性意味著先前的線程計數確定算法(及其衍生算法)已不再足夠: 這種傳統的線程數量確定算法基于邏輯核心數量,并為關鍵線程保留了兩個核心。 當核心數量超過某個點時,許多受 CPU 限制的游戲實際上會降低性能,因此額外線程并行性的優勢會被開銷所抵消。 例如,在擁有 8 個以上物理核心的高端桌面系統中,一些游戲通過將其工作池的線程數量減少到 CPU 核心數量,可實現高達 15%的性能提升。 造成性能下降的原因十分復雜且多種多樣。
]]>8759在某些場景中使用 cgroup 縮短 CUDA 初始化時間
http://www.open-lab.net/zh-cn/blog/improving-cuda-initialization-times-using-cgroups-in-certain-scenarios/
Fri, 05 Jan 2024 05:55:57 +0000http://www.open-lab.net/zh-cn/blog/?p=8671Continued]]>在多 GPU 平臺上運行的許多 CUDA 應用程序通常使用單個 GPU 來滿足其計算需求。在這種情況下,應用程序會支付性能損失,因為 CUDA 必須枚舉/初始化系統上的所有 GPU.如果 CUDA 應用程序不需要其他 GPU 可見和可訪問,您可以通過將不需要的 GPU 與 CUDA 進程隔離并消除不必要的初始化步驟來啟動此類應用程序。 本文將討論實現此目標的各種方法及其性能優勢。 在 Linux 系統上,可以使用 Linux 工具(如.在本節中,我們首先討論低級方法,然后討論更高級別的可能方法。 CUDA 提供的用于隔離設備的另一種方法是使用雖然在功能上類似,但相較于 NVIDIA Omniverse 的方法。 控制組提供了一種機制,用于將任務集及其未來的子集聚合或劃分到具有專門行為的分層組中。您可以使用來控制 CUDA 進程可見的 GPU.