平行程式設計與計算思維 練習題 (Practice - Parallel Programming and Computational Thinking)



Question 1 - 平行運算的三大目標 [recall]

情境/題目:人們追求平行運算的三個主要原因是什麼?這三者的共同本質是什麼?舉投資公司風險分析為例分別說明。

Question 2 - 演算法的三大基本性質 [recall]

情境/題目:一個程序要稱得上「演算法 (algorithm)」必須具備哪三個基本性質?各是什麼意思?這三性質與「適不適合平行化」有關嗎?

Question 3 - 演算法選擇的四個比較面向 [recall]

情境/題目:同一問題常有多個演算法可解。平行程式設計者比較演算法時要看哪四個面向?並指出本書反覆出現的三個「經典權衡」分別對應哪兩個面向與哪個範例章節。

Question 4 - radix sort vs merge sort 的權衡 [recall]

情境/題目:radix sort 與 merge sort 屬於哪一種經典權衡?各自的優勢與限制是什麼?

Question 5 - Output-centric (gather) vs Input-centric (scatter) [recall]

情境/題目:問題分解最常見的兩種策略是 output-centric 與 input-centric。請分別說明每個 thread 對應到什麼、表現出哪種記憶體存取行為、結果累積在哪、是否需要 atomics,以及為何 GPU 通常偏好其中一種。

Question 6 - 緩解序列段:Task-level 與 Hierarchical MPI-CUDA [recall]

情境/題目:Amdahl's Law 顯示「不值得單獨平行化的小活動」累積起來會封住整體 speedup。本章提出哪兩種手段來緩解這塊序列尾巴?各自的機制為何?

Question 7 - 計算思維的三大基礎技能 [recall]

情境/題目:要成為有效的 computational thinker 需橫跨哪三大基礎知識領域?並區分 SIMT / SPMD / SIMD 三者的層級差異。

Question 8 - Good / Better / Best 三種平行化策略 [recall]

情境/題目:攻擊「computation-hungry applications」有 good / better / best 三種策略,難度與報酬同步遞增。請分別說明做法、需要哪些步驟、適合誰,以及為何前兩者無法發揮全部潛力。

Question 9 - Amdahl's Law 計算(Molecular Dynamics)[application]

情境/題目:molecular dynamics 應用中 nonbonded force 佔原始序列執行時間 95%,在 GPU 上加速 100×,其餘 5% 留在 host 且無加速。分別計算「host 與 device 不重疊」與「device 執行完全藏在 host 陰影下」兩種情況的 application-level speedup,並說明它揭示的核心啟示。

Question 10 - Cutoff Binning 的 grid-centric 設計 [application]

情境/題目:序列 cutoff 演算法採 atom-centric(一次處理一個原子)。為什麼它難以直接搬上 GPU?平行 cutoff binning 改採什麼分解?請描述 bins、neighborhood、overflow list 三者的角色,以及 SmallBin-Overlap 優化什麼。

Question 11 - 為 SpMV/COO 選擇分解策略 [application]

情境/題目:稀疏矩陣向量乘法 (SpMV) 的 COO kernel 採用了哪一種分解?它使用了原本「不利 GPU」的 scatter + atomics,為什麼仍然值得?最佳分解最終取決於什麼?

Question 12 - Kogge-Stone vs Brent-Kung 的權衡 [analysis]

情境/題目:Brent-Kung 的 work-efficiency 高於 Kogge-Stone(O(N) vs O(N log N)),是否就一定比較快?請從「複雜度 vs 平行度」這個經典權衡出發,分析在不同硬體條件下誰勝出,以及如何緩解高複雜度演算法。

Question 13 - Histogram:input-centric (scatter) 為何勝過 output-centric (gather) [analysis]

情境/題目:本書多數計算(image、matmul、convolution、stencil)都用 output-centric (gather) 以避開 atomics,但 histogram 卻反其道採用 input-centric (scatter)、需要 atomics。請比較兩種分解,從三個面向分析為何 histogram 偏好 input-centric。