[Windows] CUDA基礎環境建置

前言

CUDA的編譯環境橫跨CPU和GPU,其中包括還包括GPU的特別優化,必須要先了解編譯的架構,再去建置環境才會比較有Sense。

架構

CPU 部分由系統主機編譯器處理
  • 主機端的代碼由系統主機編譯器(如 cl.exegcc)編譯成目標文件,生成供 CPU 執行的部分。
GPU 部分編譯
  • PTX(中間代碼)
    • CUDA 核心代碼(例如 __global____device__ 函數)由 PTX 編譯器編譯為 PTX。
    • PTX 是與硬件無關的中間代碼,可在多個 GPU 架構上移植。
  • SASS(硬件機器碼)
    • 如果指定了目標架構(如 sm_80),PTX 會進一步由 CUBIN 編譯器轉換為 SASS(Streaming Assembly)。
    • SASS 是針對特定 GPU 硬件生成的最佳代碼,包含硬件指令、寄存器分配、指令調度等底層優化
通過鏈接器整合為完整的可執行文件
  • nvcc 調用系統鏈接器(如 ldlink.exe),將主機代碼與設備代碼整合,生成最終的可執行文件。
  • 鏈接器會嵌入 GPU 的 PTX 或 SASS 代碼,確保運行時能夠正確加載並執行

環境建置

CPU編譯環境建置:

下載cl.exe,可參考後方連結([Windows] C/C++編譯環境建置)

GPU編譯環境建置:

  1. 下載 NVIDIA CUDA 工具包:
    • NVIDIA CUDA 官方下載頁面 下載適合你的操作系統版本的 CUDA Toolkit。
    • 安裝時選擇 Custom Installation,只保留需要的核心組件(例如:Driver、Toolkit、nvcc 編譯器)。
  2. 驗證 CUDA 安裝:
    • 打開終端或命令提示字元,執行 nvcc –version
    • 確認輸出包含 CUDA 版本資訊。

環境檢測

CPU 編譯器(cl.exe)測試:

GPU 編譯器(nvcc)測試:

編譯與執行

代碼

CUDA程式編譯

執行結果

Trouble shooting

[Trouble Shooting] 請以 Unicode 格式儲存檔案以防止資料遺失

資料來源

Hello world Cuda-C

CUDA與GCC相容性表格