資源描述:
《MPI并行程序設(shè)計.ppt》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、消息傳遞并行程序設(shè)計消息傳遞并行程序設(shè)計:指用戶必須通過顯式地發(fā)送和接收消息來實現(xiàn)處理機間的數(shù)據(jù)交換。在這種并行編程中,每個并行進程均有自己獨立的地址空間,相互之間訪問不能直接進行,必須通過顯式的消息傳遞來實現(xiàn)。這種編程方式是大規(guī)模并行處理機(MPP)和機群(Cluster)采用的主要編程方式。消息傳遞并行程序設(shè)計并行計算粒度大,特別適合于大規(guī)??蓴U展并行算法:由于消息傳遞程序設(shè)計要求用戶很好地分解問題,組織不同進程間的數(shù)據(jù)交換,并行計算粒度大,特別適合于大規(guī)??蓴U展并行算法。消息傳遞是當(dāng)前并行計算領(lǐng)域的一個非常重要的并行程
2、序設(shè)計方式。什么是MPI?MPI(MassagePassingInterface):是消息傳遞函數(shù)庫的標(biāo)準(zhǔn)規(guī)范,由MPI論壇開發(fā),支持Fortran和C。一種新的庫描述,不是一種語言。共有上百個函數(shù)調(diào)用接口,在Fortran和C語言中可以直接對這些函數(shù)進行調(diào)用。從語法上,它遵守所有對庫函數(shù)/過程的調(diào)用規(guī)則,與一般的函數(shù)/過程沒有區(qū)別。MPI是一種標(biāo)準(zhǔn)或規(guī)范的代表,而不是特指某一個對它的具體實現(xiàn)。一個正確的MPI程序,可不加修改在所有的并行機上運行。MPI是一種消息傳遞編程模型,并成為這種編程模型的代表和事實上的標(biāo)準(zhǔn)。最終目標(biāo)
3、是服務(wù)于進程間通信。MPI的發(fā)展過程發(fā)展的兩個階段:MPI1.1:1995MPICH:是一種最重要的MPI實現(xiàn),每當(dāng)MPI推出新的版本,就會有相應(yīng)的MPICH的實現(xiàn)版本。由美國Argonne國家實驗室和密西西比州立大學(xué)聯(lián)合開學(xué),具有更好的可移植性。MPI1.2~2.0:動態(tài)進程,并行I/O,支持F90和C++。為什么要用MPI?—優(yōu)點高可移植性:MPI已在IBMPC機上、MSWindows上、所有主要的Unix工作站上和所有主流的并行機上得到實現(xiàn)。使用MPI作消息傳遞的C或Fortran并行程序可不加改變地運行在IBMPC、
4、MSWindows、Unix工作站、以及各種并行機上。消息傳遞方式是廣泛應(yīng)用于多類并行機的一種模式,特別是分布存儲并行機。這種模式在一些重要的計算應(yīng)用中已取得了實質(zhì)性進步。為什么要用MPI?—優(yōu)點MPI是被正式的詳細(xì)說明的:它已經(jīng)成為一個標(biāo)準(zhǔn)。消息傳遞標(biāo)準(zhǔn)的定義能提供給生產(chǎn)商清晰定義的程序庫,以便他們能有效地實現(xiàn)這些庫或在某些情況下為庫程序提供硬件支持,因此加強了擴展性。MPI有完備的異步通信:使得send,receive能與計算重疊。可以有效的在MPP上或Cluster上用MPI編程。MPI+C實現(xiàn)的“HelloWorld
5、!”#include#include"mpi.h"main(intargc,char*argv[]){MPI_Init(&argc,&argv);printf("Hello,world!");MPI_Finalize();}MPI+C實現(xiàn)的“HelloWorld!”mpi.h是MPI標(biāo)準(zhǔn)規(guī)定的,每個MPI實現(xiàn)都要包含。它提供用戶MPI程序需要的所有必要的原型和外部變量聲明。MPI函數(shù)返回出錯代碼或MPI_SUCCESS成功標(biāo)志。MPI-前綴,且只有MPI以及MPI_標(biāo)志后的第一個字母大寫,其余小寫。MP
6、I函數(shù)的參數(shù)被標(biāo)志為以下三種類型:IN:參數(shù)在例程的調(diào)用中不會被修正。OUT:參數(shù)在例程的調(diào)用中可能會被修正。INOUT:參數(shù)在一些例程中為IN,而在另一些例程中為OUT.MPI初始化-MPI_InitintMPI_Init(int*argc,char**argv)MPI_INIT(IERROR)MPI_Init是MPI程序的第一個調(diào)用,它完成MPI程序的所有初始化工作。所有的MPI程序的第一條可執(zhí)行語句都是這條語句。啟動MPI環(huán)境,標(biāo)志并行代碼的開始。并行代碼之前,第一個mpi函數(shù)(除MPI_Initialize()外)。
7、要求main必須帶參數(shù)運行,否則出錯。MPI結(jié)束-MPI_FinalizeintMPI_Finalize(void)MPI_FINALIZE(IERROR)MPI_Finalize是MPI程序的最后一個調(diào)用,它結(jié)束MPI程序的運行,它是MPI程序的最后一條可執(zhí)行語句,否則程序的運行結(jié)果是不可預(yù)知的。標(biāo)志并行代碼的結(jié)束,清理和關(guān)閉除主進程外的其它進程。之后串行代碼仍可在主進程(rank=0)上運行(如果必須)。MPI程序的的編譯與運行mpif77hello.f或mpicchello.c默認(rèn)生成a.out的可執(zhí)行代碼。mpif7
8、7–ohellohello.f或mpicc–ohellohello.c生成hello的可執(zhí)行代碼。mpirun–np4a.outmpirun–np4hello4指定np的實參,表示進程數(shù),由用戶指定。a.out/hello要運行的MPI并行程序。輸出文件命名Hello是如何被執(zhí)行的?SPM