---
# System prepended metadata

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

---

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

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

這部分是 2023 新的 UCX 章節

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

今日大綱
1.UCX 簡介與核心目標
2.UCX 的設計哲學
3.UCX 的架構層次
4.UCP 的程式設計物件

#### 一、 UCX 簡介與核心目標

*   **定義：** UCX 是一個 communication (通訊) 的方式，也是一個 framework (框架) 。
*   **發展：** UCX 像 MPI 一樣，是從 open source community 逐漸發展成長起來的。
*   **核心目標：**
    1.  **High Performance (高效能):** 追求高效能的資料傳輸。
    2.  **Universal (通用性):** 解決各種不同裝置之間的資料移動的問題。
    3.  **簡化應用層：** 讓程式設計師可以直接透過 UCX 完成資料移動，並盡量優化。
*   **應用範圍：** UCX 的溝通需求不限於網路也包含在同一個 Node 內部的資料傳輸。
*   **複雜性處理：** UCX 旨在解決跨裝置、跨記憶體區域的資料傳輸複雜性，例如在 Host memory、GPU memory、加速器或處理器記憶體之間傳輸資料。

#### 二、 UCX 的設計哲學與社區

*   **設計理念：** UCX 的設計目標是同時達到以下三種 API 特點，這是它成功的關鍵：
    1.  **Vender Specific:** 能夠利用特定廠商的硬體優勢來達到高性能 (例如 Mellanox 的網路卡)。
    2.  **Open Source:** 程式碼開放，允許社群貢獻 ，不屬於任何單一實體。
    3.  **Research:** 整合最新的研究成果和先進做法，考量未來網路發展。
*   **推動者：** UCX 主要由 **UCF (UCX Foundation)** 這個組織推動。
*   **協作單位：** 結合了業界、國家實驗室、研究單位以及學術界
*   **定位：** UCX 扮演一個 **middleware** (中介層) 的角色，介於 user program 和底層的 driver/network stack 之間，目的是簡化介面並自動進行優化。
*   **使用者負擔：** UCX 希望減少使用者的負擔，程式設計師不需要認識所有新的技術，只需透過 UCX 即可使用。

#### 三、 UCX 的架構層次 (UCP, UCT, Service, Memory)

UCX 的架構主要切分為 UCP 和 UCT 兩層，外加輔助元件。

1.  **UCT (UCX Transport):**
    *   這是底層的實作。
    *   負責相容並支持各種通訊方法。
    *   **支援的傳輸方式：** RDMA、GPU memory 傳輸、傳統的 TCP/IP、以及 Shared Memory (用於 Node 內溝通)。

2.  **UCP (UCX Programming Interface):**
    *   相當於 UCX 的 programming interface。
    *   **核心優勢：** 它能夠根據使用者的環境和設定，自動決定 (或選擇) 應該使用哪一種 UCT 來進行 communication。
    *   UCP 接受設定參數，做出判斷後，決定呼叫哪個 UCT API 進行溝通。
    *   一般程式設計師通常只需要針對 UCP 的部分進行操作。

3.  **Service 與 Memory (輔助元件):**
    *   **Service :** 負責整個 UCX 功能的正常運作，提供 UCP 和 UCT 所需的 function 或 service。
    *   **Memory :** 專門負責記憶體管理，像是 memory allocation 等。資料傳輸最終是在 memory 跟 memory 之間進行。

#### 四、 性能與效率評估

*   **性能要求：** UCX 必須與原生的實作進行性能評估比較。
*   **小資料傳輸：** 在小資料傳輸時，UCX 由於有較多的前置作業 (setup/initialization time)，表現會稍微差一點。
*   **大資料傳輸：** 隨著資料量變大，UCX 能夠利用優化，它的 throughput 反而會超越原生的 RDMA。
*   **與 OpenSHMEM 比較：** 在延遲方面，與原生的 OpenSHMEM (一個 Shared Memory Programming API) 相比，UCX 的表現並不輸，有些情況甚至更好。

#### 五、 UCP 的程式設計物件

UCP 的介面設計與 RDMA 或 MPI 的概念相似。以下是三個最主要的物件：

1.  **Context:**
    *   通常對應到一個 process 或一個 application。
    *   程式開始使用 UCP 時必須先建立 Context。
    *   Context 包含執行所需的資訊，如電腦資源或 memory。
    *   Configuration 和 Memory 管理都屬於 Context。

2.  **Worker:**
    *   負責執行溝通的行為，如傳輸資料。
    *   一個 Context 下可以有多個 Worker。
    *   Worker 能夠處理任何一種 transportation 方式，並與另一端進行溝通。

3.  **Endpoint:**
    *   類似於連線的概念。
    *   一個 Worker 下可以接多個 Endpoint。
    *   每個 Endpoint 連接到一個 remote process。
    *   Key (用於認證和操作遠端記憶體) 屬於 Endpoint。

**輔助物件：**

*   **Configuration:** 儲存環境變數和設定，允許使用者限制 UCP 使用特定的傳輸方式 (例如只用 RDMA 或 Shared Memory)。
*   **Memory Region:** 描述和管理記憶體區塊，因為資料傳輸是從一個 memory region 到另一個 memory region。

#### 六、 溝通與 API 流程

*   **Out-of-Band：** UCX 本身不負責處理連線建立時的必要資訊交換。
*   **資訊交換需求：** 在使用 UCP 建立連線之前，必須依賴其他的溝通方式 (像是 Sockets) 預先取得必要資訊，再建立 UCP 的連接。
*   **連線建立流程 (Client-Server 範例):**
    1.  Server (S) 和 Client ( C ) 兩端分別建立 Context 和 Worker。
    2.  S 透過 Sockets (out-of-band) 將自身資訊傳給 C。
    3.  C 取得 S 的資訊後，透過 UCP 與 S 溝通，並將 C 自身的資訊透過 UCP 傳給 S。
    4.  兩端都擁有彼此的資訊後，即可透過各自的 Endpoint 進行 UCP 的資料傳輸。
*   **API 查詢：** 完整的 UCX 程式碼和 API 可以在官方連結找到。程式碼的結構化分工明確，可以幫助追蹤 UCP 或 UCT 的實作。例如，若想知道 RDMA 的程式，可以看 UCX 下 UCP 裡的 RDMA 相關程式碼。

---
其他課程連結

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