第05章 MPI并行程序設(shè)計(jì)_第1頁
第05章 MPI并行程序設(shè)計(jì)_第2頁
第05章 MPI并行程序設(shè)計(jì)_第3頁
第05章 MPI并行程序設(shè)計(jì)_第4頁
第05章 MPI并行程序設(shè)計(jì)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、MPI并行程序設(shè)計(jì)教師:彭四偉教師:彭四偉MPICH2的下載和安裝n官方下載地址:官方下載地址:n/research/projects/mpich2/downloads/index.php?s=downloadsn安裝條件安裝條件n.Net Frame 1.1/2.0nVisual C+ 2005 SP1 Redistributable Package (x86)n管理員權(quán)限管理員權(quán)限MPICH2服務(wù)(守護(hù)進(jìn)程)nMPICH2的守護(hù)進(jìn)程的守護(hù)進(jìn)程smpdn服務(wù)的安裝服務(wù)的安裝nSmpd -installn服務(wù)的卸載服務(wù)的卸載nSmpd -removen

2、服務(wù)的開啟服務(wù)的開啟nSmpd -startn服務(wù)的停止服務(wù)的停止nSmpd -stopMPICH2的配置n設(shè)設(shè)置置工工作作賬賬號(hào)號(hào)MPICH2的配置n設(shè)設(shè)置置環(huán)環(huán)境境參參數(shù)數(shù)MPICH2編程環(huán)境設(shè)置n在編譯器選項(xiàng)下設(shè)置在編譯器選項(xiàng)下設(shè)置include路徑路徑n加入加入includen在編譯器選項(xiàng)下設(shè)置在編譯器選項(xiàng)下設(shè)置lib路徑路徑n加入加入libn在編譯器選項(xiàng)下加入鏈接庫在編譯器選項(xiàng)下加入鏈接庫nmpi.libMPICH2程序的布置和運(yùn)行n程序的布署程序的布署n程序要求分布在各結(jié)點(diǎn)的相同路徑中。程序要求分布在各結(jié)點(diǎn)的相同路徑中。n通過通過mpiexec運(yùn)行運(yùn)行nmpiexec n 4 he

3、llonmpiexec hosts 4 pc1 pc2 pc3 pc4 hellonmpiexec hosts 2 pc1 2 pc2 3 hellonmpiexec localonly 4 helloMPI并行程序設(shè)計(jì)nMPI程序的一般模式程序的一般模式#include int main(int argc, char *argv) int size, rank; MPI_Init(&argc, &argv); /* initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COM

4、M_WORLD, &rank); if (rank = 0) master(); else slave(); MPI_Finalize(); /* cleanup MPI */ return 0;#include int main(int argc, char *argv) int size, rank; MPI_Init(&argc, &argv); /* initialize MPI */ MPI_Comm_size(MPI_COMM_WORLD, &size); MPI_Comm_rank(MPI_COMM_WORLD, &rank); switc

5、h (rank) case 0: . case 1: . . default: . MPI_Finalize(); /* cleanup MPI */ return 0;#include “mpi.h”int foo(int i) . int main( int argc, char *argv )int i, tmp, sum=0, group_size, my_rank, N; MPI_Status status;MPI_Init( &argc, &argv );MPI_Comm_size( MPI_COMM_WORLD, &group_size );MPI_Com

6、m_rank( MPI_COMM_WORLD, &my_rank );if (my_rank=0)printf( “N=“ ); scanf( “%d”, &N );for (i=1; igroup_size; i+)S1:MPI_Send( &N, 1, MPI_INT, i, i, MPI_COMM_WORLD; );for (i=my_rank; iN; i+=group_size)sum += foo(i);for (i=1; igroup_size; i+)S2:MPI_Recv( &tmp, 1, MPI_INT, i, i, MPI_COMM_WO

7、RLD, &status );sum += tmp;printf (“nThe result=%dn”, sum );elseS3:MPI_Recv( &N, 1, MPI_INT, 0, my_rank, MPI_COMM_WORLD, &status );for (i=my_rank; iN; i+=group_size)sum += foo(i);S4:MPI_Send( &sum, 1, MPI_INT, 0, i, MPI_COMM_WORLD );MPI_Finalize();return 0;10)(niifoo#include #include

8、#define N 1000000main()double sum=0, local, mypi, pi, dx;long i, taskid, numtask;A:dx = 1.0/N;MPI_Init( &argc, &argv );MPI_Comm_rank( MPI_COMM_WORLD, &taskid );MPI_COMM_size( MPI_COMM_WORLD, &numtask );B:for (i=taskid; iN; i+=numtask)P:local = (i+0.5)*dx;Q:sum += 4.0/(1.0+local*local

9、);mypi = sum*dx;C:MPI_Reduce( &mypi, &pi, 1, MPI_DOUBLE, MPI_SUM, 0, MPI_COMM_WORLD );D:if (taskid=0) printf( “pi is %lfn”, pi );MPI_Finalize();4)(1110102xarctgdxx#include #include using namespace std;int main(int argc, char *argv)int size, rank, x=-1;MPI_Status status;MPI_Init(&argc, &a

10、mp;argv);MPI_Comm_size(MPI_COMM_WORLD, &size);MPI_Comm_rank(MPI_COMM_WORLD, &rank);while (x!=0)if (rank=0)cout x;cout Read x from rank rank endl;elseMPI_Recv(&x, 1, MPI_INT, rank-1, 0, MPI_COMM_WORLD, &status);cout Recevied x from rank rank-1 endl;if (ranksize-1)MPI_Send(&x, 1, M

11、PI_INT, rank+1, 0, MPI_COMM_WORLD);cout Send x to rank rank+1 endl;MPI_Barrier(MPI_COMM_WORLD);MPI_Finalize();return 0;MPI的通信模式分類分類發(fā)送發(fā)送接收接收阻塞通信MPI_SendMPI_RecvMPI_IrecvMPI_BsendMPI_RsendMPI_Ssend非阻塞通信MPI_IsendMPI_IbsendMPI_IrsendMPI_IssendB:Buffer R:Ready S:SynchonousI:Immediately#include #include u

12、sing namespace std;int main(int argc, char *argv) int rank; MPI_Init(&argc, &argv); MPI_Comm_rank(MPI_COMM_WORLD, &rank); char msg17, msg317; double msg22; int s1, s2, s3; MPI_Status status; MPI_Pack_size(7, MPI_CHAR, MPI_COMM_WORLD, &s1); MPI_Pack_size(2, MPI_DOUBLE, MPI_COMM_WORLD,

13、 &s2); MPI_Pack_size(17, MPI_CHAR, MPI_COMM_WORLD, &s3); int bufsize = 3*MPI_BSEND_OVERHEAD + s1 + s2 + s3; char *buf = new charbufsize; MPI_Buffer_attach(buf, bufsize); if (rank = 0) MPI_Bsend(msg1, 7, MPI_CHAR, 1, 0, MPI_COMM_WORLD); MPI_Bsend(msg2, 2, MPI_DOUBLE, 1, 0, MPI_COMM_WORLD); MP

14、I_Bsend(msg3, 17, MPI_CHAR, 1, 0, MPI_COMM_WORLD); else if (rank = 1) MPI_Recv(msg1, 7, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); MPI_Recv(msg2, 2, MPI_DOUBLE, 0, 0, MPI_COMM_WORLD, &status); MPI_Recv(msg3, 17, MPI_CHAR, 0, 0, MPI_COMM_WORLD, &status); MPI_Buffer_detach(&buf, &bu

15、fsize); delete buf; MPI_Finalize(); return 0;緩沖模式if (rank = 0) MPI_Recv(buffer, n, MPI_INT, 1, 1, MPI_COMM_WORLD, &status); MPI_Barrier(MPI_COMM_WORLD);else if (rank = 1) MPI_Barrier(MPI_COMM_WORLD); MPI_Rsend(buffer, n, MPI_INT, 0, 1, MPI_COMM_WORLD);就緒模式MPI中的通信安全問題n例程:例程:rank傳遞傳遞01230123#inclu

16、de main(int argc, char *argv ) int rank, size, x; MPI_Status status; MPI_Init( &argc, &argv ); MPI_Comm_rank( MPI_COMM_WORLD, &rank ); MPI_Comm_size( MPI_COMM_WORLD, &size ); MPI_Send(&rank,1,MPI_INT, (rank+1)%size, 1,MPI_COMM_WORLD); MPI_Recv(&x, 1, MPI_INT, (rank+size-1)%si

17、ze, 1, MPI_COMM_WORLD, &status); MPI_Finalize(); return 0;MPI中的通信安全問題MPI中的通信安全問題MPI中的通信安全問題MPI中的通信安全問題n例程:避免死鎖的例程:避免死鎖的rank傳遞傳遞#include main(int argc, char *argv ) . if (rank%2=0) MPI_Send(&rank,1,MPI_INT, (rank+1)%size, 1,MPI_COMM_WORLD); MPI_Recv(&x, 1, MPI_INT, (rank+size-1)%size, 1,

18、MPI_COMM_WORLD, &status); else MPI_Recv(&x, 1, MPI_INT, (rank+size-1)%size, 1, MPI_COMM_WORLD, &status); MPI_Send(&rank,1,MPI_INT, (rank+1)%size, 1,MPI_COMM_WORLD); MPI_Finalize(); return 0;MPI中的通信安全問題n捆綁接收發(fā)送:捆綁接收發(fā)送:MPI_Sendrecvnint MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Data

19、type sendtype, int dest, int sendtag, void *recvbuf, int recvcount, MPI_Datatype recvtype, int source, int recvtag, MPI_Comm comm, MPI_Status *status)MPI的數(shù)據(jù)類型nMPI的數(shù)據(jù)類型是用于保障消息傳遞過程中的數(shù)據(jù)類型是用于保障消息傳遞過程中的數(shù)據(jù)能夠被正確的解釋,而不是為了用的數(shù)據(jù)能夠被正確的解釋,而不是為了用于計(jì)算。于計(jì)算。n消息傳遞中的類型匹配消息傳遞中的類型匹配n有類型數(shù)據(jù)的通信,發(fā)送方和接收方均使用相同的數(shù)據(jù)類型有類型數(shù)據(jù)的通信,發(fā)送方和接收方均使用相同的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論