MPI

信息傳遞介面

MPI是一個跨語言的通訊協議,用於編寫并行計算機。支持點對點和廣播。MPI是一個信息傳遞應用程序介面,包括協議和和語義說明,他們指明其如何在各種實現中發揮其特性。MPI的目標是高性能,大規模性和可移植性。MPI在今天仍為高性能計算的主要模型。主要的MPI-1模型不包括共享內存概念,MPI-2隻有有限的分佈共享內存概念。但是MPI程序經常在共享內存的機器上運行。在MPI模型周邊設計程序比在NUMA架構下設計要好因為MPI鼓勵內存本地化。儘管MPI屬於OSI參考模型的第五層或者更高,他的實現可能通過傳輸層的sockets和Transmission Control Protocol(TCP)覆蓋大部分的層。大部分的MPI實現由一些指定慣例集(API)組成,可由C,C++,Fortran,或者有此類庫的語言比如C#,Java orPython直接調用。MPI優於老式信息傳遞庫是因為他的可移植性和速度。

簡介


與OpenMP并行程序不同,MPI是一種基於信息傳遞的并行編程技術。消息傳遞介面是一種編程介面標準,而不是一種具體的編程語言。簡而言之,MPI標準定義了一組具有可移植性的編程介面。

組成


數據類型

定義了精確的數據類型參數而不使用位元組計數,以數據類型為單位指定消息的長度;對於C和Fortran,MPI均預定義了一組數據類型和一些附加的數據類型;可以發送 或接收連續的數據,還可以處理不連續的數據;允許發送和接收不同的數據類型。

通信域

MPICH中的一個通信域定義了一組進程和一個通信的上下文,虛擬處理器拓撲、屬性等內容。它以對象形式存在,作為通信操作的附加參數。MPI預定義的通信域:mpi comm world(包含所有進程)、mpi comm self(只包含各個進程自己的進程組)。

分類


1.mpi init()初始化MPI執行環境,建立多個MPI進程之間的聯繫,為後續通信做準備;
2.mpi finalize 結束MPI執行環境;
3.mpi comm rank用來標識各個MPI進程的,給出調用該函數的進程的進程號,返回整型的錯誤值。兩個參數:MPI_Comm類型的通信域,標識參與計算的MPI進程組; &rank返回調用進程中的標識號;
4.mpi comm size用來標識相應進程組中有多少個進程;
5.mpi send(buf,counter,datatype,dest,tag,comm): buf:發送緩衝區的起始地址,可以是數組或結構指針;count:非負整數,發送的數據個數;datatype:發送數據的數據類型;dest:整型,目的的進程號;tag:整型,消息標誌;comm:MPI進程組所在的通信域
含義:向通信域中的dest進程發送數據,數據存放在buf中,類型是datatype,個數是count,這個消息的標誌是tag,用以和本進程向同一目的進程發送的其它消息區別開來。
6.mpi recv(buf,count,datatype,source,tag,comm,status): source:整型,接收數據的來源,即發送數據進程的進程號; status:MPI_Status結構指針,返回狀態信息。

并行編程


并行編程模式
對等模式—程序的各個部分地位相同,功能和代碼基本一致,只是處理的數據或對象不同;主從模式—程序通信進程之間的一種主從或依賴關係。
點對點通信模式
阻塞—發送完成的數據已經拷貝出發送緩衝區,即發送緩衝區可以重新分配使用,阻塞接受的完成意味著接收數據已經拷貝到接收緩衝區,即接收方已可以使用。非阻塞—在必要的硬體支持下,可以實現計算和通信的重疊。4種通信模式:標準通信模式、緩存通信模式、同步通信模式、就緒通信模式。組通信一個特定組內所有進程都參加全局的數據處理和通信操作。功能:通信—組內數據的傳輸;同步—所有進程在特定的點上取得一致;計算—對給定的數據完成一定的操作。類型:
1)數據移動:廣播(mpi bcast)收集(mpi gather)散射(mpi scater)組收集(mpi all gather)全交換(all to all);
2)聚集:規約(mpi reduce)將組內所有的進程輸入 緩衝區中的數據按,定操作OP進行運算,並將起始結果返回到root進程的接收緩衝區掃描(mpi scan)要求每一個進程對排在它前面的進程進行規約操作,結果存入自身的輸出緩衝區;
3)同步:路障(mpi barrier)實現通信域內所有進程互相同步,它們將處於等待狀態,直到所有進程執行它們各自的MPI-BARRIER調用。
歷史創建信息傳遞介面的討論始於1991的夏天,一個組研究員於在奧地利進行山中修養時。那次討論之後,於1992年4月29-30號於弗吉尼亞威廉姆斯伯格召開了一次關於分散式內存環境下的信息傳遞標準設置研討會。在這次研討會上討論了對標準信息傳遞介面至關重要的一些基本特徵,並創建了一個繼續標準化此過程的工作組。Jack Dongarra, Rolf Hempel, Tony Hey, and David W. Walker於1992年11月提出了一些初始草稿提議,后被稱為MPI1。在1992年11月,一個MPI的工作組會議在Minneapolis召開,他們決定了為此標準化過程創建一個更正式的標註。MPI工作組在1993年的頭九個月每6個星期見面一次。MPI標準草稿在93年11月的超級計算機會議上提出。在經過一陣子的公眾論議后,MPI修改了一些部分,並於1994年6月發布了MPI1.0版本。這些會議和郵件共同創建了MPI論壇,此論壇後來開放至所有高性能計算的成員。
在一九九七年的七月在對原來的MPI作了重大擴充的基礎上又推出了MPI的擴充部分MPI-2 而把原來的MPI各種版本稱為MPI-1。MPI-2的擴充很多但主要是三個方面并行I/O,遠程存儲訪問和動態進程管理。MPI包含了80個人40個組織的共同努力,他們主要都在美國和歐洲。主要的時下電腦供應商也涉入MPI,還有大學的研究員,政府公務員和產業界。MPI標準定義了核心庫的語法和語義,這個庫可以被Fortran和C調用構成可移植的信息傳遞程序。MPI提供了適應各種并行硬體商的基礎集,他們都被有效的實現。這導致了是硬體商可以基於這一系列底層標準來創建高層次的慣例,從而為分散式內存交互系統提供他們的并行機。MPI提供了一個簡單易用的可移植介面,足夠強大到程序員可以用它在高級機器上進行進行高性能信息傳遞操作。在創建“真正”的MPI標準過程中,研究員們集成了幾個系統最有用的特徵到MPI中,而不是用一個系統來適應標準。其特徵為IBM,Intel, nCUBE, PVM, Express, P4 and PARMACS等系統所用。信息傳遞模式非常之吸引人,皆因它的廣泛可移植性,以及能被用於分散式內存/共享內存的多核處理器,工作站網路,和這些架構的組合。信息傳遞模式可用於多重設定,獨立於網路速度和內存架構。