CUDA 編程指南
開發者學習 CUDA 編程模型並撰寫高效能代碼以在 NVIDIA GPU 上執行的官方全面資源。本指南涵蓋平台架構、程式介面、進階硬體功能及技術規格。
課程
課程總覽
📚 內容概要
官方且全面的開發者資源,用於學習 CUDA 程式設計模型,以及如何撰寫可在 NVIDIA GPU 上執行的高效能程式碼。本指南涵蓋平台架構、程式介面、進階硬體功能與技術規格。
掌握平行運算藝術,使用業界標準的 NVIDIA CUDA 指南。
作者: NVIDIA Corporation
致謝: 版權所有 © 2007–2024 NVIDIA Corporation 及其附屬公司。保留一切權利。
🎯 學習目標
- 定義異質系統中主機(CPU)與裝置(GPU)的角色。
- 解釋 SIMT 程式設計模型,以及線程、區塊與網格的層次化組織。
- 区分 PTX(平行線程執行)與二進位碼(cubins),並說明即時(JIT)編譯如何促進相容性。
- 開發與編譯 CUDA 核心函數:撰寫 global 函數,以三箭頭語法設定執行方式,並管理 NVCC 編譯流程。
- 優化記憶體與資料搬移:區分統一記憶體、明確記憶體與對映記憶體模型,並實作頁鎖定主機記憶體以提升傳輸效率。
- 管理平行執行:使用 CUDA 流、事件與合作群組,以管理非同步任務並同步 CPU-GPU 操作。
- 進行複雜指標運算,並識別架構瓶頸(馮·諾伊曼與哈佛架構之差異)。
- 實作進階 CUDA 執行模式,包括程式控制的依賴核心啟動與異質批次記憶體傳輸。
- 利用硬體特定功能(如線程範圍、非同步代理與管道)以最大化併發性。
- 使用預取、使用提示與頁面大小管理等技術,配置與調校統一記憶體效能。
🔹 第 1 課:CUDA 基礎與架構概覽
概述: 本課介紹 CUDA 平行運算平台及其底層硬體架構。探討異質系統如何結合 CPU 與 GPU,SIMT(單一指令,多執行緒)程式設計模型,以及線程、區塊與網格的層次結構。此外,還涵蓋 CUDA 編譯工作流程,包含 PTX、cubins 與 fatbins 在確保二進位相容性與向前相容性中的角色。
學習成果:
- 定義異質系統中主機(CPU)與裝置(GPU)的角色。
- 解釋 SIMT 程式設計模型,以及線程、區塊與網格的層次化組織。
- 区分 PTX(平行線程執行)與二進位碼(cubins),並說明即時(JIT)編譯如何促進相容性。
🔹 第 2 課:核心 GPU 程式設計與執行管理
概述: 本課涵蓋使用 CUDA C++ 進行 GPU 程式設計的基本與進階主題。從基本的核心宣告與 NVCC 編譯流程,過渡到複雜的執行管理議題,包括 SIMT 核心設計、共用記憶體銀行衝突,以及使用流與事件進行非同步執行。學生將學習如何平衡記憶體模型(統一記憶體對比明確記憶體),並針對高階運算優化硬體佔用率。
學習成果:
- 開發與編譯 CUDA 核心函數:撰寫 global 函數,以三箭頭語法設定執行方式,並管理 NVCC 編譯流程。
- 優化記憶體與資料搬移:區分統一記憶體、明確記憶體與對映記憶體模型,並實作頁鎖定主機記憶體以提升傳輸效率。
- 管理平行執行:使用 CUDA 流、事件與合作群組,以管理非同步任務並同步 CPU-GPU 操作。
🔹 第 3 課:進階記憶體邏輯與多 GPU 系統
概述: 本課探討從基本記憶體架構與指標邏輯過渡至進階的 GPU 加速技術。內容包括硬體層級的執行模型(SIMT、獨立線程排程)、進階同步機制(非同步屏障、作用域原子操作),以及利用執行時間與驅動程式 API 協調多 GPU 系統。
學習成果:
- 進行複雜指標運算,並識別架構瓶頸(馮·諾伊曼與哈佛架構之差異)。
- 實作進階 CUDA 執行模式,包括程式控制的依賴核心啟動與異質批次記憶體傳輸。
- 利用硬體特定功能(如線程範圍、非同步代理與管道)以最大化併發性。
🔹 第 4 課:最佳化、圖形與硬體加速器
概述: 本課探討高階 CUDA 程式設計技術,專注於優化資料搬移與執行流程。探討從基於流的執行轉向持久化的 CUDA 圖形,透過預取與提示對統一記憶體進行細粒度控制,並利用硬體特定加速器(如張量記憶體加速器 TMA 與 L2 快取持續性)。此外,詳述進階同步模式、透過綠色上下文進行資源分割,以及現代異質計算中的跨 API 相容性。
學習成果:
- 使用預取、使用提示與頁面大小管理,配置與調校統一記憶體效能。
- 建構、更新與執行 CUDA 圖形,包括記憶體節點與裝置端啟動的使用。
- 使用非同步屏障與生產者-消費者模式,實作進階同步。
🔹 第 5 課:技術參考與語言擴充
概述: 本課深入探討 CUDA 程式設計模型的參考規格與 C++ 語言擴充。內容包括透過計算能力介接硬體與軟體,環境變數用於執行時期控制,以及使用現代 C++ 標準、合作群組與特殊硬體內建函數撰寫高效能裝置程式碼的具體語法要求。
學習成果:
- 根據 GPU 計算能力版本,識別硬體限制與功能集。
- 使用系統層級環境變數,配置 CUDA 執行環境與 JIT 編譯。
- 依循裝置端限制,應用 C++ 語言擴充(註解、匿名函數與模板)。