簡介
從硬體架構角度,GPU集群只是把作為外設通過高速PCI匯流排連線到節點內部通過PCI匯流排連線GPU。並且通過高速乙太網或者高速交換網路進行互連。GPU的加入使得集群呈現節點內部計算資源的異構化。GPU集群單個節點內部不僅可以包含單核CPU、多核CPU甚至多CPU計算資源,而且包含了單GPU或者多GPU。由於GPU不僅具有異構於CPU的計算資源,而且具有複雜而程式設計師可見的存儲層次。CPU與GPU之間通過匯流排連線,雖然GPU作為計算資源,但是GPU仍然為計算節點的外部設備,CPU和GPU之間的數據傳輸必須在CPU的控制之下顯式進行。GPU作為面向多規模數據並行計算的計算資源使得GPU集群在並行計算能力呈現多層次化。GPU集群不僅能夠支持常規粒度的單程式多數據和多程式多數據計算能力,並且可以支持更細粒度的面向大規模數據單程式多數據的和單指令多數據計算能力。給集群提供了強大的大規模數據並行處理能力。
GPU集群這種異構計算資源和多層次並行計算能力給並行程式的設計帶來了巨大的困難。並行編程環境作為集群系統的必需部件,因此集群系統的設計必須包含能夠契合GPU集群體系結構的編程模型和方便可靠的編程環境。主流的GPU集群編程模型是MPI+CUDA,負責進程間的數據傳輸,CUDA負責GPU異構計算資源上的程式設計。這種模型雖然不能充分契合體系結構,但是提供給程式設計師使用異構計算資源和發揮GPU集群多層次並行的能力。對於GPU集群環境,集群中間件包括單一系統映像與傳統集群基本一致。由於GPU出色的數據級並行計算能力,GPU集群具備強的大規模數據級並行計算能力,並且這也是GPU集群最佳出眾的地方。另外GPU是面向吞吐率的計算設備,因此GPU集群比傳統集群具有更強的吞吐率。同樣通過節點的擴增以及硬體的更新升級,GPU集群同樣具備可擴展性特點。除此之外,GPU集群具有更高的性能價格比以及性能功耗比 。
集群編程模型與範例
模式和應用程式模板描述了一個一般化的特徵元組,該元組充分地說明了一個並行算法具有的特徵,包括進程屬性(結構、拓撲和執行)、互動特性以及數據特點(劃分和放置。並行程式可以歸納為一些有明確定義的不同編程模式,絕大多數的並行程式所包含的模式種類都相對較少。並行計算資源和問題本身的並行類型決定了程式所採用的並行模式,計算資源可能決定系統可以有效支持的並行粒度大小,並行類型反映了一個應用程式或數據的結構。常用的並行編程模式包括任務播種、單控制流多數據流、數據流水線、分治策略。
任務播種又叫主從模式,包括主任務和多個從任務。主任務主要負責將問題分解成多個小的任務,同時收集各個子問題的解,將其匯總等到計算的最終結構。從進程執行一個很簡單的循環:接受訊息,進行計算,向主進程傳送結果。一般情況下,只有主從進程之間有訊息傳遞。
單控制流多數據流是一種普遍使用的模型。每個進程基本上執行同一代碼段,但是處理的數據不同。這種方法需要將應用程式數據分給不同的處理器。
數據流水線是一種比單控制流多數據流更細粒度的並行機制,傳統的數據流水線建立在功能劃分基礎上,然後每個處理器執行整個算法的一小部分。
各進程被組織成為一條流水線一一每個進程相當於流水線的一個階段,負責某個特定的任務。通信模式可以非常簡單,因為數據只在流水線的相鄰階段傳遞。由於這個原因,這種類型被看作數據流模型。通信完全可以異步執行。這種模型的效率直接取決於流水線各階段平衡負載的能力。該模型在重構系統的健壯性可以通過在各階段之間提供多個獨立路徑來實現。傳統的功能劃分雖然能夠有效分解問題,簡化設計,但是無法有效利用異構計算資源本身的獨特而強大的計算能力。由於GPU集群強大的異構的大規模數據並行計算能力,使得計算為單元的劃分變得必要,因此,針對GPU集群系統,在功能劃分的基礎之上,通過數據並行計算為單位的再劃分和組合使得數據流水線保留了原本細粒度計算特點,又能夠充分適應GPU集群具有強大大規模數據並行計算能力的特點。
分治策略是將一個問題分成兩個或者兩個以上的子問題,然後獨立的解決每一個這樣的子問題,最後將這些結果綜合起來得到最後解。一般情況下,這些子問題和原始問題的實質一樣,只是規模變小了,這樣通過遞歸旳方法可以解決。分治策略中常見的三種計算操作是:分解、計算和匯總。程式組織成一種虛擬樹結構,一些進程派生出子任務,並且匯總這些子任務的結果計算出綜合解。
計算機集群
計算機集群簡稱集群是一種計算機系統,它通過一組鬆散集成的計算機軟體和/或硬體連線起來高度緊密地協作完成計算工作。在某種意義上,他們可以被看作是一台計算機。集群系統中的單個計算機通常稱為節點,通常通過區域網路連線,但也有其它的可能連線方式。集群計算機通常用來改進單個計算機的計算速度和/或可靠性。一般情況下集群計算機比單個計算機,比如工作站或超級計算機性能價格比要高得多。集群分為同構與異構兩種,它們的區別在於:組成集群系統的計算機之間的體系結構是否相同。集群計算機按功能和結構可以分成以下幾類:高可用性集群、負載均衡集群、高性能計算集群、格線計算 。
高可用性集群
一般是指當集群中有某個節點失效的情況下,其上的任務會自動轉移到其他正常的節點上。還指可以將集群中的某節點進行離線維護再上線,該過程並不影響整個集群的運行。
負載均衡集群
負載均衡集群運行時,一般通過一個或者多個前端負載均衡器,將工作負載分發到後端的一組伺服器上,從而達到整個系統的高性能和高可用性。這樣的計算機集群有時也被稱為伺服器群(Server Farm)。一般高可用性集群和負載均衡集群會使用類似的技術,或同時具有高可用性與負載均衡的特點。Linux虛擬伺服器(LVS)項目在Linux作業系統上提供了最常用的負載均衡軟體。
高性能計算集群
高性能計算集群採用將計算任務分配到集群的不同計算節點而提高計算能力,因而主要套用在科學計算領域。比較流行的HPC採用Linux作業系統和其它一些免費軟體來完成並行運算。這一集群配置通常被稱為Beowulf集群。這類集群通常運行特定的程式以發揮HPC cluster的並行能力。這類程式一般套用特定的運行庫,比如專為科學計算設計的MPI庫。
HPC集群特別適合於在計算中各計算節點之間發生大量數據通訊的計算作業,比如一個節點的中間結果或影響到其它節點計算結果的情況。
格線計算
格線計算或格線集群是一種與集群計算非常相關的技術。格線與傳統集群的主要差別是格線是連線一組相關並不信任的計算機,它的運作更像一個計算公共設施而不是一個獨立的計算機。還有,格線通常比集群支持更多不同類型的計算機集合。格線計算是針對有許多獨立作業的工作任務作最佳化,在計算過程中作業間無需共享數據。格線主要服務於管理在獨立執行工作的計算機間的作業分配。資源如存儲可以被所有節點共享,但作業的中間結果不會影響在其他格線節點上作業的進展。