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