CUDA 基礎

最後更新: 2023-12-20 00:50:48 +0800 +0800
原文以英文撰寫。您正在閱讀AI翻譯版本。

CUDA 是 NVIDIA 用於通用 GPU 運算的平台。CUDA C++ 透過新增可在 GPU 上啟動工作的建構,擴充了 C++;而 nvcc 編譯器則負責協調主機編譯與裝置程式碼編譯。它不是獨立取代 C++ 的語言,而是圍繞 NVIDIA GPU 建立的程式設計模型與工具鏈。

執行模型 #

稱為主機程式碼的 CPU 程式會在 GPU 上啟動核心。核心會執行大量輕量級執行緒。執行緒會分組成區塊,而區塊構成網格。同一區塊內的執行緒可以透過快速的共享記憶體與同步機制協作;區塊則設計為可獨立執行,因此 GPU 能夠在多處理器之間排程這些區塊。

cpp
vector_add<<<grid_size, block_size>>>(a, b, result, count);

正確的啟動維度、記憶體存取模式與傳輸成本,與算術運算本身同樣重要。在主機與裝置之間反覆移動少量資料,可能抵銷 GPU 平行處理的效益。

記憶體與同步 #

全域記憶體對所有執行緒可見,但延遲相對較高。共享記憶體屬於區塊本地資源,適合用於重複使用資料。暫存器則由執行緒私有。合併式全域記憶體存取中,相鄰執行緒會存取相近位址,通常能提升吞吐量。

核心啟動相對於主機而言,預設是非同步的。僅在需要結果時檢查 CUDA 錯誤並進行同步;不必要的同步會降低 CPU 工作、傳輸與 GPU 執行之間的重疊程度。

多執行個體 GPU #

多執行個體 GPU(MIG)可在特定 NVIDIA 資料中心 GPU 架構上使用。它會將一個實體 GPU 分割為彼此隔離的 GPU 執行個體,並為各執行個體配置專用的部分運算與記憶體資源。CUDA 應用程式會將指派的執行個體視為獨立裝置,因此相較於一般程序共用,可實現更強的工作負載隔離。MIG 支援及可用設定檔取決於確切的 GPU 型號與驅動程式堆疊。

評論

在 GitHub 上閱讀或評論(發表評論需要登入)