---
# System prepended metadata

title: 平行程式 NTHU-PP-Chap13-UCX-Part1
tags: [平行程式]

---

教材:10710周志遠教授平行程式
https://www.youtube.com/playlist?list=PLS0SUwlYe8cxqw70UHOE5n4Lm-mXFXbZT

20250921 筆記
內容可能有錯僅供參考

這部分是 2023 新的 UCX 章節

[NTHU-PP-Chap13-UCX-Part1](https://www.youtube.com/watch?v=LTk1nLQsEhI&list=PLQTDfc8kgjhMKtgumyK0gmEelnTtqJGsp&index=29)

今日大綱
1.平行計算中的通訊挑戰與複雜性
2.底層技術：RDMA
3.中間抽象層：UCX
4.高階套件：HPCX

### 一、 平行計算中的通訊挑戰與複雜性

*   **通訊的重要性**：在平行計算中，若要追求效率和時間效益，**通訊 (communication)** 是非常重要的關鍵。
*   **網路環境的複雜性**：
    *   平行計算中的網路環境非常複雜。
    *   複雜性不只在單一電腦內部，還牽涉到 **叢集 (cluster)** 的網路配置。
    *   影響因素包括網路互連方式、底層使用的通訊或 **MPI 函式庫**。例如，不同 MPI 函式庫實作 **廣播 (broadcast)** 的方式可能不同。
    *   網路層次牽涉到硬體，是層層相扣的。
*   **對程式設計師的負擔**：
    *   網路的複雜性對程式設計師 造成了很大的負擔。
    *   程式設計師被迫需要了解網路的底層細節，以及整個系統環境的狀態。
    *   若系統環境（如網路類型）改變，程式碼可能需要修改以適應一般的網路連線，或需要尋找特定的函式庫才能快速執行，否則程式可能會跑得很慢。
*   **解決趨勢**：由於網路複雜且重要，本單元將介紹相關技術，從最底層的 **RDMA** 開始講起。

### 二、 底層技術：RDMA (Remote Direct Memory Access)

#### 1. RDMA 核心概念與硬體基礎

*   **定義**：RDMA 是一種**遠程直接記憶體存取**的技術。
*   **加速機制**：它能讓資料傳輸**繞過 CPU**，並利用 offloading (卸載) 方式加速傳輸。
*   **硬體要求**：
    *   在高階計算系統或叢集中，通常會使用 **InfiniBand (IB)** 網路。
    *   IB 的網路卡 (NIC) 和交換器 (switch) 都是**特殊化**的。
    *   IB 設備價格昂貴，通常是叢集硬體中花費較高的部分，甚至比 GPU 更高。
    *   支援 offloading 的網卡通常稱為 **Smart NIC (智慧網卡)**。

#### 2. RDMA 的優勢與 Offloading 機制

RDMA 的 Offloading 機制將網路堆疊的處理工作 (transportation layer) **卸載**到網路卡上。

*   **降低 CPU 負載**：
    *   減少 CPU 處理封包時耗費的 CPU cycles。
    *   讓 CPU 可以省下來去做使用者的計算工作，發揮其主要功用。
    *   觀察效能的方式之一是透過 CPU 的使用率會下降來驗證 offloading 的效果。
*   **減少 Context Switch**：
    *   傳統網路 (TCP/IP) 傳輸涉及多次系統核心呼叫，會導致大量的 OS 核心互動及 **Context Switch**。
    *   RDMA 傳輸路徑變短，減少了 Context Switch (例如從四次切換減少到兩次)。
    *   減少中斷 (interrupt) 對於封包處理的延遲是重要的。
*   **減少資料複製 (Zero-copy)**：資料傳輸路徑短，能減少不必要的資料複製。資料可以直接從傳送端的使用者空間寫入到接收端的使用者空間記憶體。
*   **減少延遲 (Latency)**：延遲更低且穩定，且與使用者端電腦的狀態無關。

#### 3. 單邊通訊 (One-sided Communication)

*   **與傳統通訊的差異**：
    *   傳統通訊（如 MPI 的 Send/Receive）屬於 **Two-sided Communication (雙邊通訊)**，需要通訊雙方都呼叫對應的函式，且通常需要經過 OS 核心。
    *   RDMA (One-sided) 類似共享記憶體模型。
    *   只需呼叫方 (Sender 或 Receiver) 動作，另一方不需呼叫對應的函式或中斷。
    *   例如，A 對 B 執行 Write 操作，B 的 CPU 不必介入即可完成接收，由對方的網卡完成操作。
*   **適用性**：RDMA 非常適合傳輸**大資料量**。若資料量很小，設定傳輸路徑的延遲可能會抵銷加速效果。

#### 4. RDMA 運作機制與 API (Verbs Interface)

*   **Verbs Interface**：RDMA 相關的 API 稱為 Verbs Interface，用於將 RDMA 概念實體化。
*   **工作佇列 (WQ) 與完成佇列 (CQ)**：
    *   **Work Request (WR)**：描述要執行的操作（如 send, receive, 或其他 operation）。
    *   **Work Queue (WQ)**：WR 被放入工作佇列中 (如 Send Queue 或 Receive Queue)。
    *   **Completion Queue (CQ)**：操作完成後，結果 (Work Completion) 會被丟到 CQ 中。應用程式需要透過 **輪詢 (poll)** CQ 來檢查工作是否完成。
*   **記憶體註冊 (Memory Region, MR)**：
    *   為了讓網卡能直接操作記憶體，必須對記憶體區塊進行**註冊 (Registration)**。
    *   這是為了確保安全性，只有經過授權的網卡才能寫入目標記憶體地址。
*   **安全與授權**：
    *   在設定 RDMA 連線時，需要交換**保護鍵 (protection keys)**，以防止任意機器透過網路進行記憶體操作。
    *   **Protection Domain (PD)** 的概念用於確保記憶體的保護，防止非相關的 process 擅自修改設定或資料。

#### 5. RDMA 傳輸服務 (Transport Service)

*   RDMA 支援多種傳輸服務：
    *   **可靠連線 (Reliable Connection, RC)**：需要先建立連線，提供可靠的傳輸。
    *   **非可靠數據報 (Unreliable Datagram, UD)**：無需連線，非可靠。
    *   **可靠數據報 (Reliable Datagram, RD)**：無需連線，但可靠。
    *   執行 RDMA Write/Read (One-sided Communication) 操作時，通常必須使用 **RC (可靠連線)** 服務。

#### 6. RDMA 的其他實作方式

除了 InfiniBand Verbs (IB Verbs) 外，還有其他在不同硬體上實作 RDMA 概念的方式：

*   **RoCE (RDMA over Converged Ethernet)**：使用 RDMA 傳輸方式，但運行在 **Ethernet (乙太網路)** 硬體上。仍需要支援 RoCE 的網卡，但交換器可以使用一般的 Ethernet 設備，成本相對較低。
*   **iWARP**：運行在 **TCP/IP** 堆疊上的 RDMA 實作。可以在一般電腦上使用，但因為仍需透過 OS 核心，效能提升可能較不明顯，被視為一種較便宜的軟體解決方案。

### 三、 中間抽象層：UCX (Unified Communication X)

*   **定位**：UCX 位於 RDMA 之上，抽象化了底層的硬體網路層。
*   **功能**：
    *   提供一個**統一的 API 介面**。
    *   讓程式碼能夠運行在各種不同的底層網路上。
    *   最重要的是，UCX 可以協助程式設計師選擇**最佳的底層路徑**來執行通訊。
    *   UCX 的範圍不僅限於網路通訊，它能涵蓋廣泛的資料傳輸方式，包括共享記憶體或 GPU 與 GPU 之間的資料傳輸。

### 四、 高階套件：HPCX (High-Performance Computing X)

*   **定位**：HPCX 是比 UCX 更高層次的 package (套件包)。
*   **整合內容**：HPCX 是一個包羅萬象的套件包，其中包含了 UCX。
*   **使用方式**：
    *   系統管理者或工程師在安裝叢集系統時，常會安裝 HPCX 套件。
    *   HPCX 會與 **MPI (Message Passing Interface) 函式庫**整合。
    *   程式呼叫 MPI 時，HPCX 會自動利用 UCX 等加速套件，向下層的 RDMA 硬體發出指令，從而提升效能。

### 五、 技術層次關係與趨勢總結

*   **層次結構**：技術由底層向上依序為：硬體 (網卡/Switch) + RDMA 技術 -> IB Verbs/RoCE/iWARP 實作 -> UCX 抽象層 -> MPI Library/HPCX 套件包。
*   **抽象化趨勢**：UCX 等新介面的出現，讓上層程式設計可以忽略底層網路的差異。UCX 可以在 IB、Ethernet (RoCE/iWARP) 上運行，實現程式碼的可移植性和最佳化。
*   **核心理念**：透過將網路功能移至使用者空間，繞過主機 OS kernel 來提升傳輸速度。


---
其他課程連結

[平行程式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)
