---
# System prepended metadata

title: 平行程式3A~3D The Latest Developments and Applications Using Parallel Programming
tags: [平行程式]

---

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

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

3A~3D講 The Latest Developments and Applications Using Parallel Programming

今日大綱
超級電腦的目的、組成與效能因素
如何衡量超級電腦的效能和 Top500 排行榜
超級電腦的優化層面
超級電腦的國家意義和近年趨勢
處理器技術
互連網路技術
互連網路設計層面
常見的網路拓樸
網路設備：Infiniband 與 Ethernet 比較


### 平行計算與超級電腦概述

- **超級電腦的核心目的**：平行計算最主要的目的就是為了提升效能。為了達到極致的效能而開發的電腦系統，就被稱為超級電腦。
- **超級電腦的組成與效能因素**：超級電腦並非單純由大量好電腦組成。其之所以速度快，是因為在**計算處理技術**、**網路**以及 **I/O** 等方面都採用了特殊硬體或設計，並有許多技術在背後支撐。
- **基本架構**：目前的平行計算電腦系統，包括超級電腦，其基本架構都是由許多「機架 (Rack)」所組成。
    - **機架 (Rack)**：一個機架通常指一個機櫃，用於放置電腦設備。機櫃的大小根據固定單位「**U**」來決定，每個 U 有固定的高度。例如，42U 的機櫃比 16U 的機櫃高，可以放入更多機器。
    - **伺服器/節點 (Node/Server)**：伺服器的大小也用 U 來測量。最小的機器是 1U 伺服器，2U 伺服器是其兩倍寬，以此類推。
        - **空間與散熱**：U 值越大的伺服器（空間越大），通常散熱效果越好，因為空氣流通性更好，有助於帶走熱量，使系統更穩定。如果系統配備高效的冷卻系統（例如水冷），則伺服器可以設計得非常緊密，即使內部塞滿計算元件也不怕過熱。
        - **加速器容納**：較大的 U 值伺服器（如 2U 或 4U）可以容納更多計算功能，例如體積較大的加速器，如 GPU 卡或 FPGA。
- **計算核心與加速器**：
    - 現代伺服器通常有多顆 CPU，且每顆 CPU 內含多個計算核心，提供大量的處理單元進行平行計算。
    - 單靠 CPU 難以獲得巨量的計算能力，因此現在常搭配其他專門用於特定計算工作的加速器 ，像是 GPU 是一個很好的例子，它們與 CPU 一起工作，結合不同類型的處理器以達到最佳計算效能。這種 **CPU + GPU** 的設置在平行計算電腦中很常見。

### 超級電腦的效能衡量與排行榜

- **計算能力衡量**：超級電腦的計算能力遠超一般電腦，其主要目的是提供強大的計算能力。
    - 通常使用 **FLOPS (Floating Point Operations Per Second)** 來衡量，即每秒浮點數運算的次數。
- **效能測試基準 (Benchmark)**：
    - 要測量超級電腦的效能，需要執行一個特定的基準測試程式，即 **HPL (High Performance Linpack) benchmark**。
    - HPL Benchmark 執行的是**線性矩陣方程 (linear matrix equation)** 的求解，其中的數值都是浮點數資料類型。它會測量每秒平均計算了多少個浮點數運算，以此作為最終排名依據。
    - **參數調整**：執行 HPL benchmark 時，可以調整許多參數，例如矩陣的大小、資料分割方式 等。調整的目標是讓每次分割的資料能盡量塞入快取 ，以提高快取命中率，進而提升效能。這顯示了軟體調校對於效能優化的重要性。
- **Top500 排行榜**：
    - 全球最快的超級電腦排名由一個學術主導的委員會每年在 ISC (International Supercomputing Conference) 和 SC (Supercomputing Conference) 這兩個學術會議上發布。ISC 在六月中，SC 在十一月底。
    - 廠商和開發者也會參與這些會議。
    - 委員會根據提交的 HPL benchmark 成績，發布知名的 **Top500 list**，列出全球最快的 500 台超級電腦系統。
- **為何使用 HPL benchmark？**
    - 基準測試程式並非隨意設定，它對系統設計至關重要。一個好的基準測試應能描述或代表系統未來主要計算的類型。
    - **科學計算**：超級電腦主要用於科學計算，而這些計算大多涉及數學方程式，且數值多為浮點數，對精確度要求極高 (e.g., 彈道計算、結構穩定性分析)。因此，HPL 專注於浮點數運算和線性方程求解，正是為了反映這種應用特性。
    - **雙精度浮點數**：事實上，通常更關注的是**雙精度 (double precision) 浮點數運算**的每秒次數 (double precision floating point operations per second)，因為常見應用對精確度要求高。
- **HPL benchmark的適用性爭議**：
    - 高效能計算領域一直在討論 HPL 是否仍是最適合的基準測試。
    - 隨著計算類型和硬體架構的變化，有時單純的計算指令執行速度已非最重要的瓶頸。
    - 有人提出應使用**記憶體相關的基準測試**，因為計算再快，最終可能受限於記憶體存取速度、快取大小等問題。
    - 因此，現在也有其他基準測試出現，用於衡量其他計算資源的使用能力和速度。系統可能會根據應用的類型（如記憶體綁定、I/O綁定、計算綁定或通訊綁定）選擇不同的基準測試。

### 超級電腦的優化層面

超級電腦之所以能如此快速，有幾個層面的優化：

1. **昂貴和先進的硬體**：超級電腦的硬體通常非常特殊且昂貴。例如，專門用於浮點數計算的 GPU（如 NVIDIA V100 或 P100）單張卡可能就價值數十萬台幣，遠超一般消費級顯卡。
2. **客製化系統設定**：程式在系統上執行涉及多個層級的資料流動和緩衝區搬移。如果沒有精確調校參數設定，可能導致資料不匹配或效能下降。
3. **最佳化軟體和函式庫**：程式使用的函式庫（如 MPI）其底層實作對於系統效能影響巨大。針對硬體架構和網路拓撲進行優化的函式庫，可以確保演算法在特定環境下達到最佳效能，例如優化廣播等通訊方式，避免不必要的實體鏈路繞行。
4. **金錢與能源消耗**：增加機器數量雖然有效，但必須考量有限的資金和能源消耗。更多的電腦運作需要消耗大量電力，電費高昂。因此，需要在有限的能源消耗和成本下，實現上述優化。

### 超級電腦的國家意義

- **國家強盛的象徵**：Top500 排行榜非常重要，它往往代表一個國家的強盛與否，是一種國家間的軍備競賽。
- **推動尖端研究**：所有應用（如物聯網、深度學習、AI）最終都需要強大的計算能力支撐。超級電腦支援著國家尖端技術或產品的開發，例如太空、飛機設計等。一個國家擁有超級電腦，代表其有能力和需求來推動這些高科技研究。
- **競爭格局**：美國和中國在超級電腦領域競爭激烈，日本也積極投入建設。中國曾花費巨資建設超級電腦以提升國家能力指標。美國政府也投入大量資金以奪回領先地位。
- **理論值與實際值 (Rpeak vs. Rmax)**：
    - **Rpeak (Theoretical Peak Performance)**：是根據硬體規格（如核心數、頻率、指令週期）計算出的理論最高性能，不考慮任何通訊或記憶體存取成本，代表純粹計算能力的理論值。
    - **Rmax (Maximum Performance)**：是實際執行 HPL benchmark 測得的值。
    - **效能落差**：Rmax 通常遠低於 Rpeak，例如有些機器 Rmax 僅為 Rpeak 的 60% 或 75%。這主要歸因於**通訊成本 (communication cost)** 很高。當系統規模越大（越多計算節點），資料傳輸所需的時間比例會不斷增加，導致效能損耗。因此，網路通訊對於超級電腦的效能至關重要，不單純是計算本身。
- **加速器的重要性**：GPU 等加速器的計算能力遠超 CPU，因此 Top500 前幾名的超級電腦幾乎都配備了加速器。即使有些機器表面看起來沒有加速器（如中國的「神威太湖之光」），其處理器內部也可能整合了多核處理器技術，實現了類似加速器的功能。
- **能源效率**：Top500 排行榜也列出每瓦特電力可提供的計算量 (Performance/Watt)。這代表了系統的運營成本，因此能源效率是相當重要的考量。
- 近年趨勢 (影片是2018年資料，我這裡再補上2025年6月，這裡資料僅供參考蠻有可能是錯的，有興趣可以去看實際 Top500 資料)
https://top500.org/lists/top500/
- **CPU 趨勢**：
2018 年 Intel 在超級電腦 CPU 市場佔據主導地位，約 80% 的 Top500 系統使用 Intel CPU，到了 2025年6月 Intel 下降到58.80%，AMD 則上升至34.60%，顯示AMD在高效能處理器（如EPYC系列）上的競爭力增強。
- **網路趨勢**：
2018 年Ethernet 主導系統數（約50%以上），InfiniBand 占比約25%系統，到了2025年6月Ethernet系統佔比約33.4%，價格親民且適合中低階系統，但效能佔比較低（估計不到總效能的20%），多用於較小型或非極端計算。nfiniBand系統佔比升約54.2%，因其低延遲和高頻寬（NDR200/HDR100等規格）適合大規模AI/HPC任務。其他像是HPE Slingshot系統佔比約10%但卻占了48.1%的系統效能。

- **公司佔比**：
2018年 Cray  和 IBM 在超級電腦製造商中佔有重要地位。Cray 是第一台超級電腦的製造商，並長期在該領域領先。NVIDIA 由於其 GPU 的加持，也變得非常快。2025年6月相較2018年 Cray/IBM 主導，HPE之前透過收購Cray成為最大玩家，HPE佔系統約30-35%，Lenovo從新興變主流約32%，IBM約10%。

- **國家佔比**：
2013 年美國佔據一半，但到 2018 年中國與美國的佔比已相當接近。到了 2025年6月：美國佔約35%，總效能佔比約50%以上。中國變成佔9.4%，效能佔比約15-20%。可能是因為美國政府巨資投入，中國則因美國禁售高階晶片，還有中國近期不再參加名為Top500的國際超級運算論壇，或許是怕美國再次打壓。

### Exascale computing

- **定義**：超大規模計算 (Exascale computing) 指的是超級電腦計算能力達到 **ExaFLOPS (百億億次浮點運算/秒)** 的等級。目前的系統多為 PetaFLOPS 級別，ExaFLOPS 是更高級別的目標。
- **目標與挑戰**：這是目前設計系統的中期目標。由於計算能力增長迅速，周邊系統（如資料存取、記憶體架構、網路架構）也必須跟上，才能讓機器效能完全發揮。
- **應用價值**：超大規模計算的目標是為了實現某些超大型研究，例如分析人類腦神經的極致程度。儘管在2020年曾設定目標，但目前實際進度略慢於預期。

### 處理器技術

- **CPU 與 GPU 比較**：
    - CPU 由於需要通用性，其計算能力有其限制。
    - **GPU 的優勢**：在計算能力 (FLOPS) 和記憶體頻寬上，GPU 明顯優於 CPU。
        - **計算**：GPU 擁有更多的計算核心 ，因此其聚合計算能力更強。
        - **記憶體頻寬**：GPU 記憶體通常在同一張卡上，頻寬可以做得更寬，且只有 GPU 核心存取，競爭較少。
    - **記憶體瓶頸**：儘管 GPU 內部記憶體頻寬大，但資料通常需要從主記憶體傳輸到 GPU 裝置記憶體 。這之間的頻寬傳輸往往成為效能瓶頸。
    - **加速器特性**：GPU 屬於高度平行的 SIMD 架構。
    - **成本與效率**：GPU 等加速卡通常價格較高。但從單位成本來看，它們可能更有效率。然而，實際問題在於使用者能否完全發揮其計算能力，因為可能受其他因素（如記憶體存取）限制。
- **GPU 的架構**：
    - GPU 卡本身被稱為 Device ，而原來的 CPU 機器被稱為 Host 。
    - GPU 內部有許多計算核心，這些核心並非統一管理，而是被組織成多個 **Streaming Processors (SP)** 或 **Streaming Multiprocessors (SM)**。
    - 每個 SM 內部有多個計算核心 (ALU)，它們協同提供計算能力。
    - **記憶體階層**：
        - **Shared Memory (共享記憶體)**：每個 SM 內部都有自己的共享記憶體，該 SM 內的所有核心都可以存取。
        - **Global Memory (全域記憶體)**：位於 SM 之外，不同 SM 之間的資料通訊需要透過全域記憶體。
        - **Registers (暫存器)**：每個核心也有自己的暫存器。
    - **記憶體存取策略**：資料存放位置（暫存器、共享記憶體、全域記憶體）對效能影響巨大。通常，較快的記憶體（如共享記憶體）速度可達全域記憶體的十倍以上。這需要程式設計師了解硬體架構和程式模型，以最佳化資料存取。
    - **硬體排程器 (Hardware Scheduler)**：GPU 內部的核心數量龐大，切換速度要求極高，因此採用**硬體排程器**來管理執行緒 (thread)。這與傳統作業系統的軟體排程不同，速度更快。排程原則通常基於誰的資料準備好就優先執行。
    
- **Intel Xeon Phi (KNC)**：
    - **指令集相容性**：Xeon Phi 的組合語言指令集與 Intel CPU 相同。這使得在一般 CPU 上執行的程式，基本上可以保證在 Xeon Phi 上運行，避免了重新編譯和指令不支援的問題。
    - **獨立運作能力**：Xeon Phi 卡可以作為一個獨立的 CPU (standalone CPU)。它可以在上面安裝作業系統，獨立執行程式，不需其他處理器輔助，這與 GPU 的設計理念不同（GPU 早期是從繪圖卡發展而來）。
- **神威太湖之光 (Sunway TaihuLight SW26010)**：
    - 這台超級電腦曾排名第二，它的特殊之處在於它表面上「沒有加速器」。
    - 實際上，其處理器晶片內部包含兩種不同的處理器：**slave cores (從屬核心)**，這是一個多核處理器，以及一個 **master core (主核心)**。
    - 它將這兩者結合在一起，本質上是利用多核架構來提供強大的計算能力，尤其適合矩陣運算這種資料平行 (data parallelism) 的計算。
- **Google Tensor Processing Unit (TPU)**：
    - **專用客製化處理器**：TPU 是 Google 專門為深度學習設計的張量處理單元。
    - **優化矩陣乘法**：深度學習（尤其是神經網路）的計算模式與傳統高效能計算相似，涉及大量的矩陣乘法。TPU 專門針對矩陣乘法操作進行優化和客製化，邏輯閘直接硬燒死，因此可以極快地執行。
    - **維度處理能力**：相較於 GPU（偏向向量計算，一維），TPU 針對矩陣（二維）進行計算，速度更快。CPU 則更像是對單一元素進行計算。
    - **整合趨勢**：新的 GPU 也開始將類似 TPU 的晶片整合在內，將不同類型的處理器打包在一起以加速。這顯示處理器設計趨於根據特殊應用需求進行客製化，以持續提升效能。

### 互連網路技術 (Interconnect and Network Technology)

- **網路溝通的重要性**：
    - 網路溝通對於平行計算至關重要，因為程式之間必須溝通才能解決相同問題。
    - 儘管計算效能是最終目標，但大多數平行程式的效能瓶頸卻在於網路通訊。
    - **慢於 CPU 但必備**：網路本質上是一種 I/O，其速度通常比 CPU 慢很多，但對於大規模平行計算而言卻是必不可少的。
    - **同步化 (Synchronization)**：平行程式執行時常需要同步點。同步點不僅涉及通訊，還可能導致計算等待，造成資源浪費。同步化問題是平行計算中非常複雜且常見的挑戰。
- **實體網路管理挑戰**：超級電腦的物理線路數量非常龐大且複雜。如何連接、整理和管理這些線路，使其既能運作又能管理，是一門學問。網路中的節點 (node) 增加時，連接線 (edge) 的數量會以更高的比例增長。

### 互連網路設計層面

互連網路設計涉及硬體、網路拓樸和應用三個層面。衡量網路或通訊的幾個主要目標包括：

1. **擴充性 (Scalability)**：當節點數量不斷增加時，架構能否持續支援，效能是否會嚴重下降，以及交換器上的連接埠數量是否足夠。
    - 由每個節點的 **Degree (度)** 決定：Degree 越高，表示每個節點需要連接的埠越多，可能限制擴充性。
2. **效能 (Performance)**：資料傳輸的速度。
    - 由拓樸的 **Diameter (直徑)** 決定：直徑越小，最遠的路由距離越短，效能越好。
3. **彈性 (Resilience)**：當連結或節點故障時，系統能否繼續運作，是否有足夠的備用路徑。
    - 由 **Bisection Bandwidth (二分頻寬)** 決定：切割多少條連結才能將圖分成兩個獨立部分，數值越大，彈性越好。
4. **成本 (Cost)**：硬體成本，尤其指纜線數量和連接埠數量。
    - 由 **Link (連結)** 數量決定：連結數量越少，成本越低。

### 常見的網路拓樸 (Network Topology)

這堂課的拓樸主要從應用層面分析，不涉及複雜的底層實作。以下是一些簡單拓樸的比較：

- **Linear Array**：
    
    - **特點**：所有節點排成一條線，依序連接。
    - **Diameter**：N-1 (N為節點數)，最差。
    - **Bisection**：1 (最差，一條線斷開就全斷)。
    - **Link**：N-1 (最低成本)。
    - **Degree**：2 (最優，良好擴充性)。
    - **結論**：成本最低，擴充性好，但效能和彈性極差，幾乎沒人用。
    
- **Ring**：
    
    - **特點**：在線性陣列基礎上，將首尾節點連接起來。
    - **Diameter**：N/2 (大幅改善，減半)。
    - **Bisection**：2 (改善，有兩條備用路徑)。
    - **Link**：N (只比線性陣列多一條線，成本增幅小)。
    - **Degree**：2 (擴充性仍好)。
    - **結論**：成本低，效能和彈性有顯著改善，比線性陣列好很多，在某些情況下較為常見。
- **Tree**：
    
    - **特點**：節點呈樹狀結構連接。
    - **Diameter**：更小。
    - **Bisection**：較差（如果根節點斷開）。
    - **Link**：增加。
    - **結論**：直徑小，效能不錯，但彈性可能受限。
- **2D Mesh**：
    
    - **特點**：將節點排成二維（或多維）網格，每個節點連接其上下左右（相鄰）節點。
    - **Diameter**：約 $2 * \sqrt{P}$ (P為節點數)，效能不錯。
    - **Bisection**：$\sqrt{P}$ (非常好，需切斷很多連結才斷開)。
    - **Link**：約 $2 * P$ (還不錯)。
    - **Degree**：4 (擴充性很好，與節點數無關)。
    - **結論**：效能好，彈性極佳（有很多備用路徑可做負載平衡），成本和擴充性也平衡得很好。因此廣泛應用於超級電腦，通常是 3D Mesh。
    
- **2D Torus**：
    
    - **特點**：是 Mesh 的變體。在 Mesh 的基礎上，將邊緣的節點像環一樣連接起來（例如 2D Mesh 的最左邊連最右邊，最上邊連最下邊）。
    - **結論**：具有 Mesh 的優點，並進一步改善了 Diameter 和 Bisection Bandwidth。許多超級電腦使用 Mesh 和 Torus 架構。
    
- **Hypercube**：
    
    - **特點**：每個節點用二進位字串描述。兩個節點之間只要翻轉一個位元就有連接。
    - **Diameter**：$log( P )$ (P為節點數)，通常最小。
    - **Bisection**：$P/2$ (非常好)。
    - **Link**：$P * log( P ) / 2$ (相對較多，成本較高)。
    - **Degree**：$log( P )$ (與 P 有關，擴充性差，無法擴展到非常大)。
    - **優缺點**：
        - **優點**：直徑小，彈性非常好，有很多備用路徑可進行負載平衡。
        - **缺點**：連結數量多，成本較高。**最大的缺點是其 Degree 與節點數 P 成對數關係**，導致它無法擴展到非常大規模的系統。
    - **應用場景**：Hypercube 通常適用於**小型規模的交換器 (switch) 內部連接**，例如 128 個埠的交換器內部連接。但在大型超級電腦集群中很少使用。
    
- **日本 K Computer (京)**：
    
    - 曾是全球前三名的超級電腦。
    - 其網路拓樸採用 **6D Torus**，也稱為「豆腐 (Tofu)」拓樸，因其連接方式類似切割豆腐。
    - K Computer 的設計強調其動態路由能力，能根據負載動態決定資料傳輸路徑，確保每條連結的使用率很高，避免單一瓶頸。這有助於其在執行 HPL benchmark 和通用應用時都達到高效能。
    - （額外資訊：日本的 K Computer 也強調防災和耐震設計，是其特色之一）。
- **蜻蜓拓樸 (Dragonfly Topology)**：
    
    - 這是一種近年來較新的拓樸，利用硬體技術的進步。
    - **優勢**：
        - **長距離連結**：現在的連結技術可以實現更長的距離傳輸而無效能損耗。
        - **高埠數交換器**：每個交換器可以連接非常多的埠。
        - **密集的局部連接**：在同一個機架 (rack) 內，具有非常密集的連接，提供更多的頻寬和路徑，提高局部效能。
        - **遠端直接連結**：不同機架之間仍保留一些直接連結，不論距離多遠，都能一次拉過去。
    - **比喻**：像蜻蜓一樣，翅膀密集交錯代表局部連接，長尾巴代表遠距離連結。
    - **優勢**：它能很好地適應程式的通訊模式——頻繁的局部通訊和偶爾的遠距離通訊，從而大幅提升效能。

### 網路設備：Infiniband 與 Ethernet

- **Ethernet (乙太網路)**：
    - **協定**：採用  Best-Effort 協定。資料傳輸時直接丟到通道上，若發生衝突 (conflict)，則進行退讓 (back-off)，這會浪費資源並降低傳輸速度。
    - **缺點**：衝突次數隨著資料傳輸量和頻繁度增加而增多，導致效能無法提升。
    - **成本**：硬體、軟體成本較低。
    
- **Infiniband (無限頻寬)**：
    - **協定**：採用 Reservation-Based 協定。在傳輸資料前，會先預留通道空間再傳輸，因此不會發生衝突，傳輸速度非常快。
    - **RDMA (Remote Direct Memory Access)**：Infiniband 支援 **RDMA 技術**。
        - **Direct Memory Access (DMA)**：不需 CPU 介入，由控制器直接進行資料傳輸。
        - **Remote DMA (RDMA)**：可以直接繞過 CPU 和作業系統 (OS)，將使用者空間 (user space) 的記憶體緩衝區資料直接寫入遠端網路卡上的記憶體。這**節省了大量的記憶體複製時間**，因為 Ethernet 的 TCP/IP 協定在傳輸過程中會不斷進行記憶體複製。
    - **優勢**：提供極低的延遲和極高的頻寬 。其性能遠超 Ethernet。
    - **成本**：Infiniband 的網路介面卡 (network adapter) 和交換器 (switch) 都比較昂貴，可能高達 Ethernet 的十倍。但為了追求極致效能，尤其是在通訊成為主要瓶頸時，Infiniband 是首選。


---
其他課程連結

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