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