簡介
與OpenMP並行程式不同,MPI是一種基於信息傳遞的並行編程技術。訊息傳遞接口是一種編程接口標準,而不是一種具體的程式語言。簡而言之,MPI標準定義了一組具有可移植性的編程接口 。
組成
數據類型
定義了精確的數據類型參數而不使用位元組計數,以數據類型為單位指定訊息的長度;對於C和Fortran,MPI均預定義了一組數據類型和一些附加的數據類型;可以傳送 或接收連續的數據,還可以處理不連續的數據;允許傳送和接收不同的數據類型 。
通信域
MPICH中的一個通信域定義了一組進程和一個通信的上下文,虛擬處理器拓撲、屬性等內容。它以對象形式存在,作為通信操作的附加參數。MPI預定義的通信域:mpi comm world(包含所有進程)、mpi comm self(只包含各個進程自己的進程組) 。
6個MPI調用接口
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結構指針,返回狀態信息 。
MPI並行編程
並行編程模式
對等模式—程式的各個部分地位相同,功能和代碼基本一致,只是處理的數據或對象不同;主從模式—程式通信進程之間的一種主從或依賴關係 。
點對點通信模式
阻塞—傳送完成的數據已經拷貝出傳送緩衝區,即傳送緩衝區可以重新分配使用,阻塞接受的完成意味著接收數據已經拷貝到接收緩衝區,即接收方已可以使用。非阻塞—在必要的硬體支持下,可以實現計算和通信的重疊。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等系統所用。
信息傳遞模式非常之吸引人,皆因它的廣泛可移植性,以及能被用於分散式記憶體/共享記憶體的多核處理器,工作站網路,和這些架構的組合。信息傳遞模式可用於多重設定,獨立於網路速度和記憶體架構。