版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 一年級(jí)下冊口算和筆算練習(xí)題
- 第三節(jié) 水資源的合理利用 統(tǒng)一教案
- 《量身高》大班數(shù)學(xué)教案
- 人教版二年級(jí)數(shù)學(xué)上冊教案【全冊】
- 班組建設(shè)與領(lǐng)導(dǎo)力提升
- 廣告公司門衛(wèi)聘用合同
- 燃料消耗數(shù)據(jù)分析
- S版三年級(jí)語文下冊教案
- 國際狩獵場硬裝施工合同
- 廚房改造翻新協(xié)議
- 七十歲老人換駕照考三力測試題庫
- 2024《整治形式主義為基層減負(fù)若干規(guī)定》全文課件
- 消防安全操作規(guī)程(20211127050648)
- 設(shè)備包機(jī)制度
- 大體積混凝土養(yǎng)護(hù)方案
- 腦病科優(yōu)勢病種護(hù)理方案
- 1803綜采工作面供電設(shè)計(jì)
- 水污染控制工程課程設(shè)計(jì)
- 教研員蹲點(diǎn)調(diào)研實(shí)施方案
- 《三只小豬》劇本
- 連續(xù)性內(nèi)部資料出版物準(zhǔn)印證申請表
評論
0/150
提交評論