Stencil 練習題 (Practice - Stencil Background and the Basic Parallel Kernel)


Question 1 - Stencil Order 的定義 [recall]

情境/題目:何謂 stencil 的「order(階數)」?一個 3D seven-point stencil 是幾階?它有幾個鄰點?

Question 2 - Finite Difference 一階近似 [recall]

情境/題目:寫出一階導數的經典有限差分近似公式,並說明其誤差項;由它推出的三點 stencil 係數為何?

Question 3 - Basic Kernel 的 OP/B [recall]

情境/題目:Fig. 8.6 的基本 3D seven-point stencil sweep kernel,其 floating-point 對 global memory access 比值是多少?如何算出?這代表什麼?

Question 4 - 邊界格點的處理 [recall]

情境/題目:在 stencil sweep 中,grid 的邊界格點(boundary cells)如何處理?kernel 用什麼條件實作?

Question 5 - Stencil vs Convolution 的差異 [recall]

情境/題目:stencil sweep 在程式形態上幾乎與 convolution 相同,但有哪些本質差異使它引出不同的最佳化?

Question 6 - 為何 z 鄰居可放 Register [recall]

情境/題目:在 coarsening + register tiling kernel(Fig. 8.12)中,為何 inPrev/inNext(z 鄰居)可以放 register,但 inCurr 的 x-y 鄰居必須留在 shared memory?

Question 7 - Coarsening 的方向與 Shared Memory 用量 [recall]

情境/題目:3D seven-point stencil 的 thread coarsening 沿哪個方向?coarsening 後 block size 與 shared memory 需求各變成多少?帶來什麼好處?

Question 8 - 3D Tile 的 Halo Overhead [recall]

情境/題目:對 3D order-1 stencil 的 8×8×8 input tile,halo 元素佔比約多少?和 2D 32×32 convolution tile 相比如何?為何差這麼多?

Question 9 - 計算 Tiled OP/B [application]

情境/題目:tiled 3D seven-point stencil 的 OP/B 公式為何?分別代入 T=8 與 T=32,算出達成比值(理論上限是多少?)。

Question 10 - 練習題 1:Thread Block 數量 [application]

情境/題目:grid 大小 120×120×120(含邊界)。(a) 每次 sweep 計算幾個 output 格點?(b) basic kernel(Fig. 8.6,block 8×8×8)需幾個 block?(c) tiled kernel(Fig. 8.8,block 8×8×8)需幾個 block?(d) coarsening kernel(Fig. 8.10,block 32×32)需幾個 block?

Question 11 - 練習題 2:Tile 大小與 Shared Memory [application]

情境/題目:七點 3D stencil,block 32×32,coarsening factor = 16(每 block 沿 z 處理 16 個連續 output plane)。求 (a) input tile 元素數;(b) output tile 元素數;(c) OP/B;(d) Fig. 8.10(無 register tiling)每 block shared memory;(e) Fig. 8.12(有 register tiling)每 block shared memory。

Question 12 - 為何 Stencil 的 Tiling 上限遠低於 Convolution [analysis]

情境/題目:同樣套 shared memory tiling,為何 stencil 的算術-記憶體比值上限明顯低於 convolution?以 2D five-point vs 3×3 conv、3D order-3(19-point) vs 7×7×7 conv 為例比較,並說明根本原因。

Question 13 - 小 Tile 傷 Coalescing 與 Register Tiling 取捨 [analysis]

情境/題目:(a) 為何 8×8×8 tile 會傷害 memory coalescing,thread coarsening 如何解決?(b) 在 coarsening 之上再加 register tiling,對 OP/B、global memory 流量、shared memory、register 各有何影響?何時該回退?