---
# System prepended metadata

title: 平行程式 14A~14B Heterogeneous Computing
tags: [平行程式]

---

教材: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)
