HPC系統實際上就是一個并行計算系統,很多初學者剛接觸并行計算的時候會對MPI、OpenMPI和OpenMP產生非常大的疑惑,主要原因是對這幾個概念本身理解的不清晰以及這幾個縮寫的字母確實是如此的近似。下面先通過一張圖來看看MPI、OpenMPI和OpenMP的區別。
MPI(Message Passing Interface)是信息傳遞接口,是獨立于語言的通信協議(標準),是一個庫。MPI的實現有MPICH、MPI-1、MPI-2、OpenMPI、IntelMPI、platformMPI等等,OpenMPI(open Message Passing Interface)是MPI的一種實現,也是一種庫項目。
? ? ? ? ?OpenMP(Open Multiprocessing)是一種應用程序界面(即Application Program Interface),是一種并行的實現和方法,也可以認為是共享存儲結構上的一種編程模型。
在當前的并行計算系統中,OpenMP和OpenMPI都是需要的(從上面的各自概念可以看出),OpenMP用于本地的并行計算(共享內存內存架構),支持目前所有平臺上的程序共享內存式并行計算,它相當于是給出了一個讓并行編程更加容易實現的模型,而OpenMPI則是用于機器之間的通信(分布式內存架構)。
從系統架構來看,目前的商用服務器大體可以分為三類,即對稱多處理器結構SMP?(SymmetricMulti-Processor)?,非一致存儲訪問結構?NUMA(Non-Uniform MemoryAccess)?,以及海量并行處理結構MPP(Massive ParallelProcessing)?。
它們的特征分別是共享存儲型多處理機有兩種模型,即均勻存儲器存取(Uniform-Memory-Access,簡稱UMA)模型和非均勻存儲器存取(Nonuniform-Memory-Access,簡稱NUMA)模型。而COMA和ccNUMA都是NUMA結構的改進。
SMP (SymmetricMulti-Processor)
SMP對稱多處理系統內有許多緊耦合多處理器,在這樣的系統中,所有的CPU共享全部資源,如總線,內存和I/O系統等,操作系統或管理數據庫的復本只有一個,這種系統有一個很大的特點就是共享所有資源。多個CPU之間沒有區別,平等地訪問內存、外設、一個操作系統。操作系統管理著一個隊列,每個處理器依次處理隊列中的進程。如果兩個處理器同時請求訪問一個資源(例如同一段內存地址),由硬件、軟件的鎖機制去解決資源爭用問題,SMP服務器CPU利用率狀態如下。
所謂對稱多處理器結構,是指服務器中多個CPU對稱工作,無主次或從屬關系。各CPU共享相同的物理內存,每個CPU訪問內存中的任何地址所需時間是相同的,因此?SMP?也被稱為一致存儲器訪問結構?(UMA:Uniform Memory Access)?。對?SMP?服務器進行擴展的方式包括增加內存、使用更快的?CPU?、增加?CPU?、擴充?I/O(槽口數與總線數)?以及添加更多的外部設備?(通常是磁盤存儲)?。
SMP服務器的主要特征是共享,系統中所有資源(CPU?、內存、?I/O?等)都是共享的。也正是由于這種特征,導致了SMP?服務器的主要問題,那就是它的擴展能力非常有限。對于SMP服務器而言,每一個共享的環節都可能造成SMP服務器擴展時的瓶頸,而受限制的則是內存。由于每個?CPU?必須通過相同的內存總線訪問相同的內存資源,因此隨著?CPU?數量的增加,內存訪問沖突將迅速增加,然后會造成CPU資源的浪費。實驗證明,SMP服務器CPU利用率的情況是2至4個CPU?。
NUMA(Non-UniformMemory Access)
NUMA技術可以把幾十個?CPU(?甚至上百個?CPU)?組合在一個服務器內,彌補了SMP?在擴展能力上的限制,NUMA?服務器?CPU?模塊結構如下。
NUMA服務器的基本特征是具有多個?CPU模塊,每個CPU模塊由多個CPU(如4個)組成,并且具有獨立的本地內存、?I/O槽口等。由于其節點之間可以通過互聯模塊(如稱為Crossbar Switch)?進行連接和信息交互,因此每個CPU可以訪問整個系統的內存(這是NUMA系統與MPP系統的重要差別)?。顯然,訪問本地內存的速度將遠遠高于訪問遠地內存(系統內其它節點的內存)的速度,這也是非一致存儲訪問NUMA的由來。由于這個特點,為了更好地發揮系統性能,開發應用程序時需要盡量減少不同CPU模塊之間的信息交互。
利用NUMA技術,可以較好地解決原來SMP系統的擴展問題,在一個物理服務器內可以支持上百個CPU。
但NUMA技術同樣有一定缺陷,由于訪問遠地內存的延時遠遠超過本地內存,因此當CPU?數量增加時,系統性能無法線性增加。如HP公司發布Superdome服務器時,曾公布了它與HP其它UNIX服務器的相對性能值,結果發現,64路CPU的Superdome (NUMA結構)的相對性能值是20,而8路N4000(?共享的SMP結構)的相對性能值是6.3。從這個結果可以看到,8倍數量的CPU換來的只是3倍性能的提升。
MPP(MassiveParallel Processing)
MPP和NUMA有所不同,?MPP提供了另外一種進行系統擴展的方式,它由多個?SMP?服務器通過一定的節點互聯網絡進行連接,協同工作,完成相同的任務,從用戶的角度來看是一個服務器系統。其基本特征是由多個?SMP?服務器(每個?SMP?服務器稱節點)通過節點互聯網絡連接而成,每個節點只訪問自己的本地資源(內存、存儲等),是一種完全無共享(Share Nothing)?結構,因而擴展能力很好,理論上其擴展無限制,目前的技術可實現?512?個節點互聯,數千個CPU。
在MPP系統中,每個SMP節點也可以運行自己的操作系統、數據庫等。但和NUMA不同的是,它不存在異地內存訪問的問題。換言之,每個節點內的CPU不能訪問另一個節點的內存。節點之間的信息交互是通過節點互聯網絡實現的,這個過程一般稱為數據重分配(Data Redistribution)?。
但是MPP服務器需要一種復雜的機制來調度和平衡各個節點的負載和并行處理過程。目前一些基于MPP技術的服務器往往通過系統級軟件(如數據庫)來屏蔽這種復雜性。舉例來說,Teradata就是基于MPP技術的一個關系數據庫軟件,基于此數據庫來開發應用時,不管后臺服務器由多少個節點組成,開發人員所面對的都是同一個數據庫系統,而不需要考慮如何調度其中某幾個節點的負載。
MPP大規模并行處理系統是由許多松耦合的處理單元組成的,要注意的是這里指的是處理單元而不是處理器。每個單元內的?CPU都有自己私有的資源,如總線,內存,硬盤等。在每個單元內都有操作系統和管理數據庫的實例復本。這種結構的特點在于不共享資源。
NUMA、MPP和SMP之間性能的區別
NUMA的節點互聯機制是在同一個物理服務器內部實現的,當某個CPU需要進行遠地內存訪問時,它必須等待,這也是NUMA服務器無法實現CPU增加時性能線性擴展。
MPP的節點互聯機制是在不同的SMP服務器外部通過I/O實現的,每個節點只訪問本地內存和存儲,節點之間的信息交互與節點本身的處理是并行進行的。因此MPP在增加節點時性能基本上可以實現線性擴展。
SMP所有的CPU資源是共享的,因此完全實現線性擴展。
MPP、SMP和NUMA應用的區別
NUMA架構可以在一個物理服務器內集成許多CPU,使系統具有較高的事務處理能力,由于遠地內存訪問時延遠長于本地內存訪問,因此需要盡量減少不同?CPU模塊之間的數據交互。顯然,NUMA架構更適用于OLTP事務處理環境,當用于數據倉庫環境時,由于大量復雜的數據處理必然導致大量的數據交互,將使CPU的利用率降低。
MPP系統不共享資源,因此對它而言,資源比SMP要多,當需要處理的事務達到一定規模時,MPP的效率要比SMP好。
由于MPP系統因為要在不同處理單元之間?傳送信息,在通訊時間少的時候,那MPP系統可以充分發揮資源的優勢,達到高效率。也就是說:?操作相互之間沒有什么關系,處理單元之間需要進行的通信比較少,那采用MPP系統就要好。因此,MPP系統在決策支持和數據挖掘方面顯示了優勢。
MPP系統因為要在不同處理單元之間傳送信息,所以它的效率要比SMP要差一點。在通訊時間多的時候,那MPP系統可以充分發揮資源的優勢。因此當前使用的OTLP程序中,用戶訪問一個中心數據庫,如果采用SMP系統結構,它的效率要比采用MPP結構要快得多。
聲明:內容來源自CSDN,如涉及侵權請聯系我們刪除,謝謝!