平行直方圖 (Parallel Histogram) 練習題 (Practice - Atomic Operations and the Basic Histogram Kernel)


Question 1 - Owner-computes rule 為何失效 [recall]

情境:前幾章的 pattern(如 vector add、convolution)都遵守 owner-computes rule。為什麼 histogram 無法套用此規則?此現象稱為什麼?

Question 2 - atomicAdd 的語意與回傳值 [recall]

情境:CUDA kernel 呼叫 atomicAdd(&histo[k], 1)。請說明它對記憶體做了什麼、回傳什麼、以及為何沒有函式呼叫開銷。

Question 3 - Read-modify-write race condition [recall]

情境:兩個 thread 都對初值為 0 的 histo[x] 各做一次 histo[x]++(非 atomic)。畫出/說明一種會得到錯誤結果 1(而非 2)的交錯,並指出問題本質。

Question 4 - 單一位址 atomic 的吞吐瓶頸 [recall]

情境:許多 thread 同時對 同一個 histo bin 做 atomicAdd。為什麼「越多並行存取 → 越高吞吐」的常規在此失效?單一位址的吞吐約等於多少?

Question 5 - Last-level cache atomics 為何加速 [recall]

情境:現代 GPU 允許在所有 SM 共享的 last-level cache (L2) 執行 atomic。為什麼這能大幅提升 atomic 吞吐?

Question 6 - Privatization 的概念與記憶體需求 [recall]

情境:解釋 privatization 如何降低 atomic contention,常見以什麼為單位複製,以及 global-memory 版(Fig. 9.9)host 端要配置多少記憶體、每個 thread 用什麼 offset。

Question 7 - 為何 per-block + 放 shared memory [recall]

情境:為什麼把 private histogram 建在「每個 thread block 一份」特別有利?把它放進 shared memory(Fig. 9.10)又帶來什麼好處與前提?

Question 8 - Interleaved partitioning 的步長與 coalescing [recall]

情境:在 coarsened kernel(Fig. 9.14)中,interleaved partitioning 的迴圈索引如何前進?為什麼這在 GPU 上比 contiguous 好?

Question 9 - Exercise 1:atomic 最大吞吐計算 [application]

情境:假設 DRAM 系統中每個 atomic operation 的總延遲為 100 ns。對 同一個 global memory 變數做 atomic,最大吞吐是多少?

Question 10 - Exercise 5:正確的 atomicAdd 寫法 [application]

情境:要把整數變數 Partial 的值 atomic 加到 global memory 整數變數 Total,下列何者正確? (a) atomicAdd(Total, 1) (b) atomicAdd(&Total, &Partial) (c) atomicAdd(Total, &Partial) (d) atomicAdd(&Total, Partial)

Question 11 - Exercise 6:各 kernel 的 global atomic 次數 [application]

情境:輸入 524,288 個元素,histogram 128 bins,1024 threads/block。分別求 (a) Fig. 9.6 basic kernel、(b) Fig. 9.10 privatization+shared、(c) Fig. 9.14 +coarsening(factor 4) 在 global memory 上最多做幾次 atomic?

Question 12 - Contiguous vs Interleaved partitioning [analysis]

情境:同樣是 thread coarsening,為什麼 contiguous partitioning 在 CPU 上常是最佳,卻在 GPU 上次佳?從 cache 與 coalescing 角度比較兩種分法。

Question 13 - Aggregation vs simple kernel 的取捨 [analysis]

情境:aggregation kernel(Fig. 9.15)在何種資料下能顯著加速、何種下反而更慢?它新增的 if 是否一定造成嚴重 control divergence?