天天看點

并行方法openMP和MPI介紹與比較

并行處理parallel processing

并行處理是計算機系統中能同時執行兩個或多個處理的一種計算方法。并行處理可同時工作于同一程式的不同方面,可以節省大型和複雜問題的解決時間。要想使并行處理,首先要對程式進行并行化處理,也就是說将工作的部分配置設定到不同線程中。并行處理由于存在互相關聯的問題,是以不能自動實作。常用的程式并行處理方法有openMP和MPI。

openMP特點:線程級;共享存儲;隐式(資料配置設定方式);可擴充性差

MPI特點:程序級;分布式存儲;顯示;可擴充性好

openMP

openmp是由OpenMP Architecture Review Board 牽頭提出,用于共享記憶體并行系統的多處理器程式設計的一套指導性編譯處理方案。openMP支援C/C++和Fortran;支援openMP的編譯器包括 Sun Compiler、GUN Compiler 、Intel Compiler等。OpenMp提供了對并行算法的高層的抽象描述,程式員通過在源代碼中加入專用的pragma來指明自己的意圖,由此編譯器可以自動将程式進行并行化,并在必要之處加入同步互斥以及通信。當選擇忽略這些pragma,或者編譯器不支援OpenMp時,程式又可退化為通常的程式(一般為串行),代碼仍然可以正常運作,隻是不能利用多線程來加速程式執行。

優點:降低了并行程式設計的難度和複雜度

OpenMP提供的這種對于并行描述的高層抽象降低了并行程式設計的難度和複雜度,這樣程式員可以把更多的精力投入到并行算法本身,而非其具體實作細節。對基于資料分集的多線程程式設計,OpenMP是一個很好的選擇。同時,使用OpenMP也提供了更強的靈活性,可以較容易的适應不同的并行系統配置。線程粒度和負載平衡等是傳統多線程程式設計中的難題,但在OpenMP中,OpenMP庫從程式員手中接管了部分這兩方面的工作。

但是,作為高層抽象,OpenMP并不适合需要複雜的線程間同步和互斥的場合。OpenMp的另一個缺點是不能在非共享記憶體系統(如計算機叢集)上使用。在這樣的系統上,MPI使用較多。

MPI–message passing interface

MPI是一個跨語言的通信協定,用于編寫并行計算機。MPI是一個資訊傳遞應用程式接口,包括協定和語義說明。

優點:高性能、大規模性和可移植性。

主要的MPI-1模型不包括共享記憶體概念,MPI-2隻有有限的分布共享記憶體概念。

但是MPI程式經常在共享記憶體的機器上運作。在MPI模型周邊設計程式比在NUMA架構下設計要好因為MPI鼓勵記憶體本地化。

盡管MPI屬于OSI參考模型的第五層或者更高,他的實作可能通過傳輸層的sockets和Transmission Control Protocol (TCP)覆寫大部分的層。大部分的MPI實作由一些指定慣例集(API)組成,可由C,C++,Fortran,或者有此類庫的語言比如C#, Java or Python直接調用。MPI優于老式資訊傳遞庫是因為他的可移植性和速度。

與openMP并行程式不同,MPI是一種基于資訊傳遞的并行程式設計技術。消息傳遞接口是一種程式設計接口标準,而不是一種具體的程式設計語言。。。簡而言之,MPI标準定義了一組具有可一直性的程式設計接口。

組成

(1)資料類型:定義了精确的資料類型參數而不适用位元組計數,以資料類型為機關指定消息的長度;對于C語言和Fortran語言,MPI均預定義了一組資料類型和一些附加資料類型;可以發送或者接受連續的資料,也可以處理不連續的資料;允許發送和接收不同的資料類型。

(2)通信域 :MPICH中的一個通信域定義了一組程序和一個通信的上下文、虛拟處理器拓撲、屬性等内容。

并行程式設計模式

(1)對等模式:程式各個部分地位想聽,功能和代碼基本一緻,隻是處理的資料和對象不同;

(2)主從模式:程式通信程序之間的一種主從或依賴關系

通信方式

(1)點對點通信模式

(2)組通信;一個特定組内所有程序都蠶技術全局資料處理和通信操作

組通信功能1)組内資料傳輸2)同步,組内所有程序在特定的點聲去的一直 3)計算,對給定資料完成一定的操作。

對比與分析,常識

“多台機器,每台都是多核。那自然是OpenMP+MPI”,這種想法是錯誤的。很多人認為SMP叢集的系統OpenMP+MPI混編性能最好,那都是有些想當然了,覺得MPI需要通信拷貝操作,是以性能差,業界内經過測試,都知道純MPI性能比純openMP和OpenMP+MPI混合都要好得多,缺點是記憶體占用會大些。若想用openMP寫出MPI的性能,具體做法就是把MPI的通信用openMP 資料複制代替,還不如直接用MPI,至少還可以擴充到分布式。

若是采用了openMP+MPI混合程式設計的方式,會在MPI基礎上加大了複雜度,那麼采用它的目的就是減少記憶體占用,而非提高性能。(即使在共享記憶體下,純粹的共享記憶體系統,MPI程式也不輸openMP,大多數時候甚至更好)

繼續閱讀