第三章練習題 (Practice - Advanced CUDA)

Question 1 - cudaLaunchKernelEx 的價值 [recall]

你想在「不修改 kernel 原始碼」的前提下,於每次啟動附加 cluster 維度或 shared memory carveout 等額外屬性,但 triple chevron <<<>>> 只能表達固定參數——該用什麼機制?<<<>>> 的四個可程式化參數又是哪些?

Question 2 - Thread Block Clusters 的保證與約束 [recall]

Thread block clusters 從哪個 compute capability 開始支援?它提供什麼執行保證?grid 維度與 cluster 維度之間有何約束?

Question 3 - Programmatic Dependent Launch 的重疊機制 [analysis]

第一個 kernel 已把後續所需資料寫入 global memory 卻仍有其他工作要做,第二個 kernel 在用到那份資料前也有一段獨立工作——請說明 PDL 如何讓兩者部分重疊,以及缺一不可的三個組成。

Question 4 - 異質批次傳輸的 srcAccessOrder [application]

你用 cudaMemcpyBatchAsync 做一個異質批次,一部分 source 來自 pinned host memory、另一部分是當前 scope 的 stack buffer——各應設哪種 srcAccessOrder?為什麼?

Question 5 - SIMT 與 Independent Thread Scheduling [recall]

SM 以多少 threads 為一組執行一條共同指令?compute capability 7.0 (Volta) 的 independent thread scheduling 改變了什麼?對舊的 warp-synchronous code 有何要求?

Question 6 - Thread Scopes 與 Scoped Atomics [recall]

thread scope 由窄到寬有哪些、各自的 point of coherency 為何?scoped atomics 由哪兩個概念組成,效能三原則是什麼?

Question 7 - Producer-Consumer 的 Memory Ordering [application]

thread 0 寫 data = 42 後設置 ready 旗標,其餘 thread 自旋等到 ready 再讀 data——ready 的 store/load 該用哪種 memory ordering?若兩端都改用 relaxed 會發生什麼?

Question 8 - Asynchronous Barrier 為何分離 arrive/wait [analysis]

解釋 asynchronous barrier 相對單階段 __syncthreads() 把 arrive 與 wait 分離為何能提升效率,並說明 bar.arrive()bar.wait() 各自的行為。

Question 9 - 非同步複製硬體機制與 L1/Shared Carveout [recall]

列出 LDGSTS / TMA / STAS 各自起始的 compute capability 與資料路徑;設定 L1/shared carveout 用哪個 API,它是 hint 還是硬性需求?

Question 10 - CUDA Driver API 基本流程 [recall]

CUDA driver API 的入口點前綴是什麼?任何 driver API 呼叫前必做什麼?context 類比於什麼?runtime 隱式建立的 primary context 如何從 driver API 取得?

Question 11 - Driver API 傳參時的 struct 對齊差異 [analysis]

用 driver API 以單一 parameter buffer(CU_LAUNCH_PARAM_BUFFER_POINTER)傳參時,struct { float f; float4 f4; } 為何在 host code 完全不 padding,但在 device code 卻會在 f 之後 padding?

Question 12 - Multi-GPU 的 current device 語意 [recall]

在 host thread 中如何切換 current device?device memory 分配、kernel launch、stream/event 綁定各自落在哪個裝置?把 kernel launch 到綁定別的裝置的 stream 會如何?

Question 13 - 跨裝置同步與 P2P 環境設定 [application]

你要讓 device 1 上某 stream 的工作等待 device 0 上記錄的 event 才開始——該用哪個 API?另外,在 Linux bare-metal 上做 PCIe P2P 前,IOMMU 必須如何設定?

Question 14 - Features 導覽:Kernel 效能與延遲 [recall]

「work stealing」靠哪個功能、哪個架構引入?async data copies 指的是哪一種搬移(別與什麼混淆)?CUDA graphs 有哪兩種建立方式與兩大效益?

Question 15 - Features 導覽:功能性與細緻控制 [recall]

green context 的作用為何?dynamic parallelism 是什麼?跨不同 host process 共享 GPU buffer 用什麼?啟用 CUDA 錯誤紀錄的環境變數是哪個?