感謝您提交詢問!我們的一位團隊成員將在短時間內與您聯繫。
感謝您提交預訂!我們的一位團隊成員將在短時間內與您聯繫。
課程簡介
簡介
- CUDA 是什麼?
- CUDA 與 OpenCL、SYCL 的比較
- CUDA 功能與架構概述
- 設定開發環境
初學者起步
- 使用 Visual Studio Code 建立新的 CUDA 專案
- 探索專案結構與檔案
- 編譯與執行程式
- 使用 printf 和 fprintf 顯示輸出結果
CUDA API
- 了解 CUDA API 在主機程式中的角色
- 使用 CUDA API 查詢裝置資訊與功能
- 使用 CUDA API 配置與釋放裝置記憶體
- 使用 CUDA API 在主機與裝置間複製資料
- 使用 CUDA API 啟動核心(kernels)並同步處理程序(threads)
- 使用 CUDA API 處理錯誤與例外狀況
CUDA C/C++
- 了解 CUDA C/C++ 在裝置程式中的角色
- 使用 CUDA C/C++ 撰寫在 GPU 上執行並操作資料的核心
- 使用 CUDA C/C++ 的資料類型、限定詞、運算子與表示式
- 使用 CUDA C/C++ 的內建函數,例如數學、原子(atomic)、線程束(warp)等。
- 使用 CUDA C/C++ 的內建變數,例如 threadIdx、blockIdx、blockDim 等。
- 使用 CUDA C/C++ 的函式庫,例如 cuBLAS、cuFFT、cuRAND 等。
CUDA 記憶體模型
- 了解主機與裝置記憶體模型的差異
- 使用 CUDA 記憶體空間,例如全域、共用、常數和本地記憶體
- 使用 CUDA 記憶體物件,例如指標、陣列、紋理和表面(surfaces)
- 使用 CUDA 記憶體存取模式,例如唯讀、唯寫、讀寫等。
- 使用 CUDA 記憶體一致性模型與同步機制
CUDA 執行模型
- 了解主機與裝置執行模型的差異
- 使用 CUDA 處理程序(threads)、區塊(blocks)和網格(grids)來定義平行性
- 使用 CUDA 處理程序函數,例如 threadIdx、blockIdx、blockDim 等。
- 使用 CUDA 區塊函數,例如 __syncthreads、__threadfence_block 等。
- 使用 CUDA 網格函數,例如 gridDim、gridSync、cooperative groups 等。
偵錯
- 了解 CUDA 程式中常見的錯誤與缺陷
- 使用 Visual Studio Code 偵錯器檢查變數、中斷點、呼叫堆疊等。
- 在 Linux 上使用 CUDA-GDB 偵錯 CUDA 程式。
- 使用 CUDA-MEMCHECK 檢測記憶體錯誤與洩漏。
- 在 Windows 上使用 NVIDIA Nsight 偵錯並分析 CUDA 程式。
最佳化
- 了解影響 CUDA 程式效能的因素
- 使用 CUDA 合併存取(coalescing)技術提升記憶體吞吐量
- 使用 CUDA 快取與預取技術降低記憶體延遲
- 使用 CUDA 共用記憶體和本地記憶體技術最佳化記憶體存取與頻寬
- 使用 CUDA 效能分析及其工具測量並改善執行時間與資源利用率。
總結與後續步驟
最低要求
- 理解 C/C++ 語言及平行程式設計概念
- 具備計算機架構與記憶體階層的基本知識
- 有命令列工具與程式編輯器的使用經驗
受眾
- 希望學習如何使用 CUDA 程式設計 NVIDIA GPU 並發揮其平行運算能力的開發者。
- 希望撰寫能在不同 CUDA 裝置上運行的高效能且具可擴展性程式碼的開發者。
- 希望探索 GPU 程式設計的底層細節並最佳化程式效能的程式設計師。
28 小時