教材:10710周志遠教授平行程式
https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT
20250904 筆記
內容可能有錯僅供參考
14A~14B Heterogeneous Computing
今日大綱
異質計算 (Heterogeneous Computing)
GPGPU (General-Purpose computing on GPU) 的基礎架構與應用
GPU 的內部架構 (Host, Device, Kernels, Memory Hierarchy)
### **異質計算 (Heterogeneous Computing)**
**異質計算**指的是將不同類型的處理器結合起來,最常見的是結合 **CPU 與 GPU** 或其他 ASIC 架構的加速器。
* **CPU 的特性**:
* 具有高度彈性和通用性,每個核心都能獨立完成完整的任務。
* 功能強大,但不容易客製化。
* **異質計算的優勢**:
* 結合 CPU 和加速器(如 GPU)的優點,提高整體計算能力。
* 許多超級電腦都採用這種架構。
#### **異質計算的實現方式**
1. **傳統獨立架構 (Discrete GPU)**:
* 這是最簡單且常見的方式。**GPU 和 CPU 是完全分開的**。
* GPU 被視為一個**加速器**,通過 **PCIe (Peripheral Component Interconnect Express)** 連接到主機板上。2025 年,PCIe 5.0 提供高達 128 GB/s 的頻寬,但仍遠低於 GPU 內部記憶體頻寬。
* **GPU 擁有獨立的記憶體**、暫存器和硬體排程器。
* **CPU (Host 端) 無法直接控制 GPU 的計算**,它只能將任務放到 GPU 的記憶體中,由 GPU 自行決定何時執行、如何執行。
* 缺點:GPU 和 CPU 的記憶體是獨立的,**資料必須進行複製 (memory copy)** 才能在兩者之間傳輸,這會導致顯著的效能開銷。
2. **異質系統架構 (HSA - Heterogeneous System Architecture)**:
* HSA 旨在**將不同種類的處理器從系統層面整合在一起**。
* **核心目標:實現統一的記憶體 (Unified Memory)**。這表示 CPU 和 GPU 可以共同存取同一塊記憶體,避免了資料複製的開銷。
* **與傳統多核心 CPU 的差異**:
* 傳統 CPU 核心由作業系統 (OS) 管理和排程。
* HSA 中,GPU 不受 CPU 或 OS 的管轄,它有自己的內部排程器和管理機制。
* 這種獨立性導致在共享記憶體時,兩者之間的溝通和協調變得更為複雜,需要專門的系統設計來解決。
* **優點:**將 CPU 和 GPU 整合在同一晶片上,可以**大幅提高資料傳輸頻寬 (bandwidth)**。有些 HSA 架構甚至將記憶體控制器等元件直接整合到晶片中,進一步提升頻寬。
* 產品實例:AMD 的 **APU (Accelerated Processing Unit)** 就是這種概念的實踐,如 Ryzen 7040 系列 (2023 年起),將 CPU 和 GPU 整合在同一個晶片封裝 (package) 中,實現了共享記憶體。中國的天河三號超級電腦也採用了類似的單晶片整合架構。
* **普及挑戰:**儘管 HSA 技術早在 2011 年就已存在,但由於其**特殊的程式模型和缺乏完整的開發工具鏈**,尚未在消費級市場完全普及。它們主要應用於追求極致效能的超級電腦、大型計算或客製化系統,這些系統通常會自行開發相應的工具。近年來,AMD 的 ROCm 平台和 Intel 的 oneAPI 積極推廣 HSA 相關技術,試圖擴展其應用範圍。
---
### **GPGPU (General-Purpose Computing on GPU) 的基礎架構與應用**
本課程將重點關注 **GPU 計算**,首先介紹其基本架構。
#### **GPU 的基礎概念**
* 它是一種**專用處理器 (specialized processor)**,硬體架構基於 **SIMD (Single Instruction, Multiple Data)** 模型。
* GPU 擅長處理**圖形應用中普遍存在的資料平行性 (data parallelism)**,這也是它被大量採用的原因。
* SIMD 架構使得 GPU 可以在單一處理器內擁有**非常多的計算核心**。
#### **GPU 的強大計算能力與優勢**
* 核心數量龐大:例如,NVIDIA 的 H100 GPU (2023 年) 內含高達 16,896 個 CUDA 核心,Blackwell 系列 (2025 年) 核心數量進一步增加。
* 高 concurrent 執行:每個計算核心甚至可以像 CPU 的超執行緒 (Hyperthreading) 一樣,同時執行多個執行緒,使得同時期的執行緒數量可高達數十萬個。
* **空間、管理、電力效益**:
* 傳統的超級電腦需要佔用整個房間的機櫃。
* 現在,可能只需要一台體積較大的電腦(內含數十張 GPU 卡,如 NVIDIA DGX 系統),就能提供相同的計算能力。
* 這大幅節省了空間、管理成本和電力消耗。例如,NVIDIA 的 Blackwell 架構相較前代 Hopper 提供高達 4 倍的能效提升。
#### **GPU 的發展與市場格局**
* 早期的顯示卡主要用於圖形加速。
* AMD 策略:將 GPU 整合到 CPU 中,稱之為 APU,因為越來越多應用需要計算能力。2025 年,AMD 的 RDNA 4 架構進一步增強 APU 的 GPGPU 能力,支援機器學習和高效能計算。
* **NVIDIA 策略:專注於 GPGPU (General-Purpose Computing on GPU)**,將 GPU 用於一般性的通用計算而非僅限於顯示,並取得了巨大成功。
* GPGPU 的發展,主要在於開發了**專門的函式庫 (library) 和軟體介面 (interface)** (如 CUDA、cuDNN、OpenCL),讓程式設計師能更方便地將程式卸載到 GPU 執行,而非大幅改變硬體本身。
* 市場競爭:NVIDIA 在 GPGPU 領域處於領先地位,Intel 透過 oneAPI 和 Xe 架構的 GPU (如 Data Center GPU Max 系列) 積極進入市場,與 NVIDIA 既合作又競爭。AMD 的 ROCm 平台也在快速發展,試圖挑戰 NVIDIA 的 CUDA 生態。
#### **GPGPU 系統的通訊瓶頸與解決方案**
* 我們課程中使用的 GPGPU 系統,GPU 與 host CPU 通常是透過 **PCIe** 連接的。
* PCIe 的限制:GPU 與 CPU 之間的通訊頻寬相對不高,PCIe 5.0 (2025 年) 提供 128 GB/s,但仍低於 GPU 內部記憶體頻寬 (如 H100 的 3 TB/s 或 Blackwell 的 8 TB/s)。
* **NVIDIA 的解決方案:NVLink**。
* NVIDIA 自行開發的互連技術,用來**取代 PCIe**。
* 大幅提升了 **GPU 與 CPU 之間**,以及更重要的 **GPU 卡與 GPU 卡之間** 的通訊頻寬。2025 年 NVLink 5.0 提供高達 1.8 TB/s 的雙向頻寬。
* 相較於 host 端的 PCIe 頻寬,GPU 內部記憶體 (internal DRAM) 的頻寬可高出數倍 (如 128 GB/s vs. 8 TB/s),這表明 NVIDIA 更多地著重於**優化 GPU 外部的通訊效能**。
* 記憶體複製的效能影響:由於 GPU 和 CPU 記憶體是獨立的,**資料在兩者之間複製會造成嚴重的效能瓶頸**。因此,後續的優化會著重於減少資料傳輸次數和時間,例如使用統一記憶體 (Unified Memory) 或 NVLink Fusion 技術。
#### **GPU 記憶體限制與多 GPU 系統**
* **GPU (Device) 記憶體容量相對較小**,例如 NVIDIA H100 提供 141 GB HBM3,Blackwell B200 高達 192 GB HBM3e,而 **CPU (Host) 記憶體容量則大得多** (數百 GB 甚至 TB)。
* 這意味著,當需要處理的資料量過大時,**單張 GPU 可能無法一次載入所有資料**。
* 資料頻繁地在 GPU 和 Host 之間傳輸會嚴重降低效能。
* 為了解決這個問題,現今的 GPGPU 伺服器通常會配置**多張 GPU 卡 (例如 8 或 16 張卡)**,如 NVIDIA DGX B200 系統,支援高達 144 個 GPU 晶片的 NVLink 網域。
* 資料會被**分散儲存到每張 GPU 的記憶體中**。
* 此時,**GPU 卡之間的高速通訊變得至關重要**,這也是 NVLink 的主要價值所在。
* 儘管 GPU 的計算能力不斷提升,但如果**記憶體存取和資料傳輸的效能無法跟上,將會成為整體效能的瓶頸**。
#### **GPU 的內部架構 (Host, Device, Kernels, Memory Hierarchy)**
GPU 內部採用**分層的架構 (hierarchical architecture)**:
1. **Host 與 Device**:
* Host:指的是 CPU 及其連接的記憶體和週邊設備。
* Device:指的是 GPU 及其連接的記憶體和相關硬體。
2. **Streaming Multiprocessor (SM)**:
* 每個 GPU 內部包含多個 SM (或稱處理器叢集)。例如,NVIDIA H100 有 132 個 SM,Blackwell B200 進一步提升至 168 個 SM。
* 每個 SM 內又包含許多 **串流處理器 (Stream Processor, SP)** 或 CUDA 核心。
3. **記憶體階層 (Memory Hierarchy)**:
* **暫存器 (Register)**:
* 位於最頂層,速度最快。
* 是**每個執行緒 (thread) 獨有**的局部儲存空間。
* 部分 Register File 會被劃分給 Shared Memory 使用。
* **共享記憶體 (Shared Memory)**:
* 每個 **SM 內部**有一塊獨立的共享記憶體。
* 可供**該 SM 內的所有計算核心共同存取**。
* 速度非常快,用於 SM 內部的快速資料交換。
* **不同 SM 之間無法直接存取彼此的共享記憶體**。
* **全域記憶體 (Global Memory)**:
* 這是 GPU 上的**主記憶體**,所有 SM 內的所有計算核心都能存取。
* 連接到外部,相對而言速度較慢。
* 資料會從 Global Memory 載入到 Shared Memory 或 Cache 以加速存取。
* **硬體管理 (Hardware Management)**:
* GPU 內部有自己的硬體排程器,負責決定工作分配、資源排程 (執行緒、記憶體位置等)。
* Host 端將指令發送給 Device,但具體執行細節由 GPU 內部自行管理,CPU 的作業系統和程式設計師通常無法直接干預。
#### **程式設計模型 (Programming Model)**
* 雖然 GPU 內部管理複雜,但像 CUDA 這樣的 API 提供了抽象層,讓程式設計師可以**控制記憶體位置** (例如指定資料存放在暫存器、共享記憶體還是全域記憶體) 以及**執行緒的分組和協調** (如 Block 和 Grid)。
* 程式設計師需要了解 GPU 的底層架構,才能透過這些抽象層有效地控制硬體,進而優化程式效能。
* 重要概念:Host, Device, Register, Shared Memory, Global Memory 這些是編寫 GPU 程式時必須牢記的關鍵架構元素。
#### **Stream Processor 內部細節與執行單位**
* 一個 Stream Processor 包含計算單元 (ALU/FPU) 和暫存器檔案 (Register File)。
* **執行單位:Warp**:
* GPU 並不是以單個核心為單位執行,而是以**某個數量執行緒為一組的 Warp** 執行。NVIDIA GPU 通常以 32 個執行緒為一組 Warp。
* 同一個 Warp 內的所有執行緒會**同時執行 (SIMD)**。
* **不同 Warp 之間則可能錯開時間執行**。
* 程式設計師需要自行加入**同步機制 (synchronization)**,以確保不同執行緒之間的正確協同工作。
#### **2025 NVIDIA GPU 產品線與應用場景**
NVIDIA 將其 GPU 產品分為不同的系列,以應對不同的應用需求:
1. **Data Center GPUs (HPC / Data Center)**:
* 主要用於**高效能計算 (HPC)**,如科學模擬、資料中心、AI 訓練和推論。
* 強調極致的計算效能和精確度。例如,H100 和 Blackwell 系列 (B100, B200) 提供高達 4 PFLOPS 的 FP4 推理效能。
* **高精度需求:**通常需要**雙精度浮點運算 (double precision, FP64)**,因為科學模擬對精確度要求極高。
2. **Quadro / RTX PRO (Professional Visualization)**:
* 專業視覺化應用,如 CAD/CAM、電影製作、虛擬化工作站。
* 具備虛擬化功能,允許多個虛擬機共享顯卡資源。2025 年 RTX PRO 6000 Blackwell Server Edition GPU 針對企業級資料中心視覺化工作負載優化。
3. **GeForce (Gaming / Consumer)**:
* 消費級顯示卡,主要用於遊戲或複雜的圖形渲染。
* 追求高速度和高幀率。2025 年 GeForce RTX 50 系列 (如 RTX 5090) 提供高達 3,352 TOPS 的 AI 計算能力和 2 倍於 RTX 4090 的效能。
* **低精度需求:**在**深度學習訓練中,通常只需要單精度浮點運算 (single precision, FP32)**,因為人眼對細微的數值差異不敏感。因此,消費級的 GeForce 顯卡因其高單精度性能和較低的成本,常被用於深度學習訓練。
4. **Jetson (AI at the Edge / Embedded Deep Learning)**:
* 專為嵌入式深度學習應用設計,如自動駕駛、機器人、手機等邊緣設備。2025 年 NVIDIA Jetson AGX Thor 提供高達 2,000 TOPS 的 AI 效能,適用於機器人與自主系統。
* 主要用於**推論 (inference)**,即將訓練好的模型部署到終端設備進行預測。
* 通常記憶體容量較小,注重即時性、低功耗。
---
其他課程連結
[平行程式1C~2B Introduction parallel programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Syxh3H7Kxe)
[平行程式3A~3D The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJh7QFVKle)
[平行程式4A~4B IO Parallel IO and Program Analysis](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJLMsuHFgg)
[平行程式5A~5B The Latest Developments and Applications Using Parallel Programming](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/SJh57hIFle)
[平行程式6A~6B Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/r1X9kX_Fle)
[平行程式 6C~6D Communication Routines and Parallel Function Code](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/S1DPjoYFlx)
[平行程式 7A~8A Pthread:Synchronization Problem & Tools](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJu-_0tKge)
[平行程式 8B~8D Synchronization Tools & Open Multi-Processing(OpenMP)](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1ki4E2Fee)
[平行程式 9A~9B Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJTYMrpKlx)
[平行程式 10A~10B Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/B1cY6M1qee)
[平行程式 10C~10D Synchronization Tools & Open Multi-Processing Synchronization Construct](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BkgFaNg5gg)
[平行程式 11A~11B Parallel Work Pool and Termination / Parallel Sorting](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1hfOw-5xl)
[平行程式 12A~12B Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/Symo-zQ9eg)
[平行程式 12C~12D Parallel Sorting and Pipelined Computations](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJYNKDVceg)
[平行程式 13A-13B Sychronous Parallelism](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HJ2UJ2Bqex)
[平行程式 14A~14B Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BksS4yP5eg)
[平行程式 14C~14D Heterogeneous Computing](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/BJrfTUd9xx)
[平行程式 15A~15B Parallel Programming Model on GPU](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/ByWnl-t5gg)
[平行程式 16A~16B What is Compute Unified Device Architecture(CUDA)?](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/HyYpsjcqgl)
[平行程式 17A~18A 平行運算的CUDA](https://hackmd.io/@6FOC2dvARe-Vz0kVSyajew/H1dUeBT5lg)
[平行程式 18B~19A 記憶體層級 / CUDA的優化](https://hackmd.io/@JuitingChen/HyF44e1jge)
[平行程式 19B~19D 記憶體層級 / CUDA的優化 ](https://hackmd.io/@JuitingChen/ryPEu4lieg)
[平行程式 20A~20B CUDA優化全域和區域記憶體/共享記憶體](https://hackmd.io/@JuitingChen/r1X659Zoxl)
[平行程式 21A~21B Parallel Reduction / Distributed Computing Framework](https://hackmd.io/@JuitingChen/HyiOpozjxl)
[平行程式 NTHU-PP-Chap10-Big Data-Part1 ](https://hackmd.io/@JuitingChen/Hyc-e3Golx)
[平行程式 NTHU-PP-Chap10-Big Data-Part2 ](https://hackmd.io/@JuitingChen/ryC_QTXoxl)
[平行程式 NTHU-PP-Chap11-MapReduce](https://hackmd.io/@JuitingChen/HJgBXJOsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part1](https://hackmd.io/@JuitingChen/ryh5hBtsge)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part2](https://hackmd.io/@JuitingChen/rJ2G7kdjxg)
[平行程式 NTHU-PP-Chap12-Distributed Training-Part3](https://hackmd.io/@JuitingChen/HkA471dilx)
[平行程式 NTHU-PP-Chap13-UCX-Part1](https://hackmd.io/@JuitingChen/rJbq103ieg)
[平行程式 NTHU-PP-Chap13-UCX-Part2](https://hackmd.io/@JuitingChen/SJpNmk_ixl)
[平行程式 NTHU-PP-Chap13-UCX-Part3](https://hackmd.io/@JuitingChen/HkIUYa13xe)