聯繫我們

課程簡介

簡介

  • 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 小時

人數


每位參與者的報價

即將到來的課程

課程分類