GPU分散式演算法與CPU多執行緒演算法之單機系統模擬
Outline Multi-Threading(多執行緒) Threads API OpenMP的特點 OpenMP vs. Multi-Threading 單機系統模擬 Conclusion 2/1/2010 ICAL
Multi-Threading(多執行緒) Thread是在CPU執行的最基本單位,在傳統 的單一Thread的程式,同時只能使用一個 CPU,無法完全發揮多CPU或多核心CPU的 運算能力。 Multi-Threading是一種將Process內的工作分 成多個Thread的技術。能使一個Process同時 運用多顆CPU或多個核心CPU,以充份運用 硬體運算資源。 2/1/2010 ICAL
Threads API Windows API – Threads POSIX Threads (Pthreads) 微軟提供在Windows系統上,可被各種語言乎 叫的API,其中有一部份的函數可運用於建立 、管理Threads,進而撰寫出Multi-Threading 的 程式。 POSIX Threads (Pthreads) 專用於Unix-like POSIX 系統,如Linux、Solaris 的一套可建立、管理Threads的API。此API後來 也出現可在微軟Windows平台上執行的版本。 2/1/2010 ICAL
OpenMP的特點 專用於共享記憶體架構多執行緒程式開發 的跨平台API 支援C、C++、Fortran語言 提供對平行演算法高階的抽象描述,可有 效降低開發平行運算程式的難度和複雜度 ,使程式開發者更加專注於平行演算法本 身,而不需要去處理具體的細節 2/1/2010 ICAL
OpenMP的特點(續) 使用Threads API的方式來進行多核心程式設計 ,必須自行創建threads,自行設計分配各 threads的工作、順序,自行協調規劃各threads 在存取記憶體時的行為並加以保護以防止計算 發生錯誤,自行匯集統合各threads的計算結果 ,並刪除threads。 OpenMP只需在欲平行化的程式碼前加入一些 相關註釋,OpenMP會自動將創建threads、管 理threads、匯整結果並刪除threads,各細節自 動處理完畢,可節省大量開發時間。 2/1/2010 ICAL
OpenMP vs. Multi-Threading 優點:因許多細節都自動的被處理,開發方便快速 缺點:也因細節的被自動處理,程式人員欲開發的 細節受到限制,無法針對硬體進行效能優化 Multi-Threading 優點:Threads的創建、管理的各種細節都由自行 處理,可對硬體做效能優化與特殊處理 缺點:因Threads的大小細節需自行處理,在程式 開發上耗時耗力 2/1/2010 ICAL
單機系統模擬 系統模擬使用OpenMP、Windows API Threads、CUDA,以測試使用OpenMP或 Threads兩種不同的程式開發方式效能差距 。 將一張已被SVD分解的影像資料,會分解 為紅綠藍3種顏色,每個顏色3個1024×1024 的距陣。系統模擬分別使用只動用單一核 心的CPU、四核心CPU和大量核心GPU以矩 陣相乘的方式進行還原。 2/1/2010 ICAL
模擬測試環境 GPU CPU Device NVIDA Geforce 9600 GSO Cores 96 Processor Clock 1375 MHz Standard Memory 384 MB Memory Bandwidth 38.4 GB/sec CPU Device Intel Core 2 Quad Q9300 Cores 4 Processor Clock 2.5 GHz FSB speed 1333 MHz L2 Cache 6 MB 11/17/09
測試結果 Single-CPU OpenMP Windows API Threads CUDA Red 45.157 sec. Green 45.828 sec. 24.594 sec. 26.421 sec. Blue 45.797 sec. 23.656 sec. 26.718 sec. Total (sec.) 136.782 sec. 75.703 sec. 77.764 sec. 1.734 sec. 2/1/2010 ICAL
分析 經以上實驗結果可發現,無論使用OpenMP 或Threads API,在效能上的差距仍相當接 近,因此在進行選擇時,可以不需要太考 慮效能因素。 雖然OpenMP在程式開發上非常簡單便利, 但也因此無法決定threads較細節的部份。反 之,使用Windows Threads API或Pthreads則 因需自行決定threads的細節,而可以對硬體 進行特殊的控制或進一步對效能進行優化 。 2/1/2010 ICAL
Conclusion OpenMP程式開發簡單快速,但無法控制細 節, Threads API程式開發較困難耗時,但自 行決行threads運作細節。 同一種演算法使用OpenMP或Threads API效 能相近,但Threads API可進一步對硬體進行 效能優化。 雲端運算主機使用CPU與NVIDIA CUDA GPU協同運算,在時間、人力充足的情況下 ,可以考慮使用Threads API對硬體做進一步 效能優化。 2/1/2010 ICAL