CUDA 入門練習題 (Practice - Introduction to CUDA)

Question 1 - GPU 演進與 CUDA 起源 [recall]

請說明 GPU 繪圖 pipeline「部分階段可程式化」與「CUDA 推出」分別是哪一年,並寫出 CUDA 的全名。

Question 2 - Host / Device 與 Kernel [recall]

在 CUDA 的異質系統中,host 與 device 各指什麼?「kernel」與「launch a kernel」又是什麼意思?

Question 3 - GPU DRAM 命名與 on-chip 記憶體粒度 [recall]

從 device code 的視角,連到 GPU 的 DRAM 叫什麼名稱?register file 與 shared memory 的配置粒度(per-thread 或 per-block)各為何?

Question 4 - Array 與 Tile 的對比 [recall]

在 tile programming model 中,array 與 tile 在「存放位置」「可變性」「能否當 kernel 參數」三方面有何不同?

Question 5 - Compute Capability、PTX 與 cubin 命名 [recall]

Compute Capability 與 SM 版本如何對應(以 CC 12.0 為例)?compute_80sm_86 分別指哪一種產物?

Question 6 - Warp 與 SIMT [recall]

一個 warp 由幾個 threads 組成、lane 如何編號?SIMT 的全名是什麼?什麼情況稱為 warp divergence、會造成什麼後果?

Question 7 - 選擇 thread block 大小 [application]

你要為一筆 1000 個元素的工作 launch 一個 SIMT kernel,打算用每個 block 1000 個 threads。從 warp 角度看這個數字好嗎?該如何調整較佳?

Question 8 - cubin 二進位相容性 [application]

某函式庫只內含為 CC 8.6(sm_86 編譯的 cubin。請判斷它能否直接載入並執行於 CC 8.0、CC 8.9、CC 9.0 的 GPU,並說明理由。

Question 9 - 為何 block 間不可有資料相依 [analysis]

CUDA 要求 grid 內不同 thread block 之間無排程順序保證、且彼此無資料相依、必須可任意順序執行。為什麼這條限制對 GPU 的可擴展性很重要?

Question 10 - Mapped memory 為何不是高效替代 [analysis]

有人想用 mapped memory(可被 GPU 直接存取的 CPU memory)取代 unified memory 或「把資料放到適當記憶體空間」。從效能角度分析為何這通常不是好主意。