本書的整體目標與組織架構 (Goals & Book Organization)

重點總覽 (Overview)

本筆記涵蓋 PMPP 的三大整體目標 (overarching goals)、貫穿全書的計算思維 (computational thinking),以及全書四個部分 (Part I–IV)、Chapters 2–23 的組織架構與學習路徑。

項目 內容 對應章節
目標 1:high performance 教你寫出高效能平行程式;需對硬體有概念性理解 Ch.4 (架構)、Ch.5–6 (記憶體/效能)
目標 2:correctness & reliability 簡單的 barrier sync / memory consistency / atomicity 達成可除錯、可維護 工具與 data parallelism
目標 3:future scalability 讓程式在更平行的未來硬體上自動跑更快 關鍵 = regularize + localize 記憶體存取
核心方法 computational thinking — 用適合 HPC 的方式重構問題 Ch.19 深入探討
Part I (Ch.2–6) 基礎:data parallelism、CUDA C、GPU 架構、效能優化 必修地基
Part II (Ch.7–12) primitive parallel patterns convolution…merge
Part III (Ch.13–19) 進階 patterns + 應用 sorting…computational thinking
Part IV (Ch.20–22) advanced practices(專家級) cluster / dynamic / future
Important

三大目標並非獨立:用來達成 high performance 的技術(regularize、localize memory access)同時也是 future scalability 的關鍵;而專注 data parallelism 則能同時換取 high performance 與 high reliability。

三大整體目標 (Three Overarching Goals)

目標 主張 達成手段 警示 / 例外
High performance 主要目標:教你把 massively parallel processor 寫到快 不需深厚硬體專業,但需直覺式架構理解才能推理效能 完全不懂硬體的「全自動工具」可能還要很多年;懂硬體的人用工具更有效
Correctness & reliability 初次跑得快不夠,要能除錯、支援使用者 CUDA 鼓勵簡單的 barrier synchronization、memory consistency、atomicity;並提供功能與效能瓶頸雙重除錯工具 reliability 在平行運算中是「subtle issue」,易被忽略
Future scalability 未來機器更平行 → 同一份程式應自動更快 關鍵:regularize + localize 記憶體存取,降低 critical resource 消耗與更新資料結構的衝突 同樣的高效能技術 = 可擴展性技術,兩者不可分
Tip

為了目標 ①,本書特地以 Chapter 4 (Compute Architecture and Scheduling) 專章建立 GPU 架構的直覺;其餘架構概念則在「需要時」隨高效能技術一併引入,而非孤立教學。

計算思維 (Computational Thinking)

全書四個部分 (Four-Part Organization)

                Programming Massively Parallel Processors (PMPP)
                                   │
   ┌───────────────┬──────────────┴───────────────┬──────────────────┐
   ▼               ▼                               ▼                  ▼
PART I          PART II                        PART III           PART IV
基礎概念        primitive patterns             進階 patterns       advanced
(Ch.2–6)        (Ch.7–12)                      + 應用 (Ch.13–19)   practices
                                                                  (Ch.20–22)
   │               │                               │                  │
 學會當           套用 Part I 知識,             把所有材料            邁向
 GPU 程式員       邊用邊引入新架構特性          整合到真實應用        專家

                    ┌──────────────────────────────────────┐
                    │  Ch.23 Conclusion & Outlook (目標回顧) │
                    └──────────────────────────────────────┘
Note

Part I 打地基;Part II/III 「用中學」——只在 pattern 需要某硬體特性或優化技術時才引入它。Part III 相較 Part II 更著重**「先列出多種平行化方案 → 比較優缺 → 程式碼轉換」**的應用導向流程。

Part I — 基礎概念 (Fundamental Concepts, Ch.2–6)

主題 引入的關鍵概念
Ch.2 Heterogeneous Data Parallel Computing data parallelism + CUDA C(以 vector addition 貫穿) 平行化六步驟(見下)
Ch.3 Multidimensional Grids and Data 多維 thread/data 組織與執行模型 grid/block、resource & data binding
Ch.4 Compute Architecture and Scheduling GPU 核心組織、thread 排程 transparent scalability、SIMD & control divergence、multithreading & latency tolerance、occupancy
Ch.5 Memory Architecture and Data Locality GPU 記憶體階層、特殊記憶體 CUDA 變數記憶體類型、data locality
Ch.6 Performance Considerations thread 執行與記憶體存取的理想模式 optimization checklist(後兩部分反覆使用)

Ch.2 的 CUDA 平行化六步驟(以 vector addition 示範):

// (1) 找出可平行化的部分;(2) 隔離資料 + 在 device 配置記憶體
cudaMalloc((void**)&d_A, size);            // device global memory
cudaMalloc((void**)&d_B, size);
cudaMalloc((void**)&d_C, size);
// (3) 把資料傳到 device
cudaMemcpy(d_A, h_A, size, cudaMemcpyHostToDevice);
cudaMemcpy(d_B, h_B, size, cudaMemcpyHostToDevice);
// (4) 把平行部分寫成 kernel function
//     __global__ void vecAddKernel(float* A, float* B, float* C, int n){ ... }
// (5) 啟動 kernel 交由平行 threads 執行
vecAddKernel<<<ceil(n/256.0), 256>>>(d_A, d_B, d_C, n);
// (6) 把結果傳回 host
cudaMemcpy(h_C, d_C, size, cudaMemcpyDeviceToHost);
Warning

Part I 刻意使用顯式 (explicit)cudaMemcpy 來傳資料,目的是讓讀者理解「底層發生什麼」。unified virtual memory / zero-copy memory 等可自動共享 CPU/GPU 資料的特性,要到 Ch.22 才引入——不要在初學階段就跳過顯式傳輸。

Part II — Primitive Parallel Patterns (Ch.7–12)

Pattern 順帶引入的技術
Ch.7 Convolution 訊號/視覺常見 pattern,重 data access locality constant memory、caching
Ch.8 Stencil 解微分方程,類似 convolution 但有額外優化空間 3D thread/data 組織、thread granularity (coarsening)
Ch.9 Parallel Histogram 統計分析、模式辨識 atomic operationsprivatization
Ch.10 Reduction (and Minimizing Divergence) reduction tree 彙總資料 control divergence 的影響與緩解
Ch.11 Prefix Sum (Scan) 把本質序列的計算轉成平行 work efficiency 概念
Ch.12 Merge divide-and-conquer 分工 dynamic input data identification

Part III — 進階 Patterns 與應用 (Advanced Patterns & Applications, Ch.13–19)

主題 借用 / 引入
Ch.13 Sorting radix sort + merge sort 借用 prefix sum、parallel merge
Ch.14 Sparse Matrix Computation 大型資料集 資料重排:compression、padding、sorting、transposition、regularization
Ch.15 Graph Traversal 圖搜尋;圖結構影響演算法選擇 借用 histogram、merge
Ch.16 Deep Learning CNN 高效實作 借用 tiling、convolution pattern
Ch.17 Iterative MRI Reconstruction 非笛卡爾 MRI 重建 loop fusion、scatter-to-gather 轉換
Ch.18 Electrostatic Potential Map 分子視覺化/分析,不規則資料 借用 sparse matrix 的經驗
Ch.19 Parallel Programming & Computational Thinking 計算思維、平行演算法結構 高層 case study,跨多種程式模型

Part IV — Advanced Practices (Ch.20–22) 與結語

主題 重點特性
Ch.20 Heterogeneous Computing Cluster 每節點含 CPU+GPU 的叢集 MPI + CUDA 協同、通訊議題
Ch.21 CUDA Dynamic Parallelism GPU 自行依資料/結構產生工作 不必每次都等 CPU 派工
Ch.22 Advanced Practices & Future Evolution 雜項進階特性 zero-copy memory、unified virtual memory、多 kernel 同時執行、debugging、profiling、double-precision…
Ch.23 Conclusion & Outlook 回顧目標、總結章節如何拼合 預測 massively parallel computing 為未來十年最精彩領域之一
Tip

全書以 CUDA 為唯一範例載體,但目的是建立通用平行程式設計的地基:先在具體模型中學透,再把知識遷移到 OpenMP / OpenCL / MPI 等(見 01-Introduction/02-Speedup-Challenges-and-Related-Interfaces)。

考試/面試重點 (Exam / Test Patterns)

情境 / 關鍵字 答案 / 技巧
「本書的三大目標?」 ① high performance ② correctness/reliability ③ future scalability
「達成 future scalability 的關鍵?」 regularize 與 localize 記憶體存取,降低 critical resource 消耗與更新衝突(= 高效能技術)
「為何高效能技術 = 可擴展性技術?」 兩者都靠規律化、局部化記憶體存取;最佳化既加速也讓未來更平行硬體自動受益
「computational thinking 是什麼?」 適合 HPC 的方式重構與求解問題;Ch.19 深入
「CUDA 怎麼兼顧 correctness?」 提供簡單的 barrier synchronization、memory consistency、atomicity + 功能/效能除錯工具;聚焦 data parallelism
「四個部分各是什麼?」 I 基礎(2–6)、II primitive patterns(7–12)、III 進階+應用(13–19)、IV advanced practices(20–22)
「CUDA 平行化六步驟?」 identify → isolate+cudaMalloccudaMemcpy H2D → 寫 kernel → 啟動 kernel → cudaMemcpy D2H
「哪章講 GPU 架構地基?」 Ch.4(transparent scalability、SIMD/control divergence、latency tolerance、occupancy)
「unified/zero-copy memory 在哪章?」 Ch.22;Part I 刻意用顯式 cudaMemcpy 讓讀者懂底層
「需要硬體專業才能寫高效能?」 否,但需概念性/直覺式架構理解才能推理效能