| 5 | 1/1 | 返回列表 |
| 查看: 2555 | 回復(fù): 8 | ||
| 當(dāng)前只顯示滿足指定條件的回帖,點(diǎn)擊這里查看本話題的所有回帖 | ||
[求助]
關(guān)于MPI并行編程的基本問題
|
||
|
想要自學(xué)MPI并行編程,由于以前從未接觸過MPI,有熟悉的希望能幫個(gè)忙,多謝。 我現(xiàn)在的想要的是,給我舉一個(gè)MPI的實(shí)際例子,下面是我寫的一個(gè)簡(jiǎn)單的Fortran程序,是關(guān)于計(jì)算兩個(gè)數(shù)組相乘的。程序不是很復(fù)雜,希望熟悉MPI的兄弟姐妹幫我改編成MPI并行程序,并詳細(xì)說明一下如何運(yùn)行(由于初學(xué)MPI,對(duì)這方面的知識(shí)還處于空白狀態(tài)),希望有人幫忙,不勝感激! Program Matrix Implicit None Integer :: I,J,K Integer :: A(4,4),B(4,4),C(4,4) Data A/1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7/ Data B/9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3/ Do I=1,4 Do J=1,4 C(I,J)=0 Do k=1,4 C(I,J)=C(I,J)+A(I,K)*B(K,J) Enddo Enddo Write(1101,*) (C(I,J),J=1,4) Enddo End [ Last edited by mhyuan on 2011-7-11 at 21:40 ] |
木蟲 (小有名氣)
|
剛?cè)腴T,寫了一個(gè)最簡(jiǎn)單的并行程序(Matrix.f90)。如下: Program Matrix Implicit None Include 'mpif.h' Integer :: I,J,K Integer :: iam,np,ierr integer :: status(MPI_STATUS_SIZE) Integer :: A(4,4),B(4,4),C(4,4) Call MPI_INIT(Ierr) Call MPI_COMM_RANK(mpi_comm_world,iam,ierr) Call mpi_comm_size(mpi_comm_world,np,ierr) Data A/1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7/ Data B/9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3/ Data C/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/ Do J=1,4 Do I=1,4 C((iam+1),J)=C((iam+1),J)+A((iam+1),I)*B(I,J) Enddo Enddo If (iam==0) then Call MPI_Recv(c(2,1),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,2),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,3),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(2,4),1,MPI_Integer,1,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,1),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,2),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,3),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(3,4),1,MPI_Integer,2,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,1),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,2),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,3),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Call MPI_Recv(c(4,4),1,MPI_Integer,3,0,mpi_comm_world,status,ierr) Elseif (iam==1) then Call MPI_send(c(2,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(2,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Elseif (iam==2) then Call MPI_send(c(3,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(3,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Elseif (iam==3) then Call MPI_send(c(4,1),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,2),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,3),1,MPI_Integer,0,0,mpi_comm_world,ierr) Call MPI_send(c(4,4),1,MPI_Integer,0,0,mpi_comm_world,ierr) Endif If (iam==0) then Do I=1,4 Write(1102,*) (C(I,J),J=1,4) Enddo Endif Call MPI_FINALIZE(ierr) End 運(yùn)行方式為: mpif90 Matrix.f90 -o Matrix mpirun -np 4 ./Matrix (當(dāng)然在并行機(jī)環(huán)境下) 運(yùn)行結(jié)果(fort.1102): 136 60 146 79 103 47 99 61 133 61 124 79 163 75 149 97 (與上面的串行程序結(jié)果(fort.1101)完全一樣) (這個(gè)并行程序很低級(jí),有待繼續(xù)改進(jìn)......) |
|
簡(jiǎn)單版本 Program Matrix Implicit None Include 'mpif.h' Integer :: I,J,K Integer :: iam,np,ierr Integer :: A(4,4),B(4,4),C(4,4) Integer :: AA(4),CC(16) Call MPI_INIT(Ierr) Call MPI_COMM_RANK(mpi_comm_world,iam,ierr) Call mpi_comm_size(mpi_comm_world,np,ierr) Data A/1,2,3,4,5,6,7,8,9,1,2,3,4,5,6,7/ Data B/9,8,7,6,5,4,3,2,1,9,8,7,6,5,4,3/ Data CC/0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0/ Do I=1,4 AA(I)=A((iam+1),I) Enddo Do J=1,4 Do I=1,4 CC(J)=CC(J)+AA(I)*B(I,J) Enddo Enddo Call MPI_Gather(CC,4,MPI_Integer,CC,4,MPI_Integer,0,mpi_comm_world,ierr) If (iam==0) then K=0 Do I=1,4 Do J=1,4 K=K+1 C(I,J)=CC(K) Enddo Write(1103,*) (C(I,J),J=1,4) Enddo Endif Call MPI_FINALIZE(ierr) End 運(yùn)行方式一樣 運(yùn)行結(jié)果一樣 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 324分 085600材料與化工 +6 | 呆鵝oor 2026-03-27 | 6/300 |
|
|---|---|---|---|---|
|
[考研] 0856材料化工調(diào)劑 總分330 +17 | zhubinhao 2026-03-27 | 17/850 |
|
|
[考研] 復(fù)試調(diào)劑 +5 | 雙馬尾痞老板2 2026-03-31 | 5/250 |
|
|
[考研] 考研調(diào)劑 +8 | 小蠟新筆 2026-03-29 | 8/400 |
|
|
[考研] 328求調(diào)劑 +5 | 鵬鵬碰嘭嘭 2026-03-24 | 5/250 |
|
|
[考研] 329求調(diào)劑,一志愿西北工業(yè)大學(xué),材料工程(085601) +6 | 小小機(jī)靈蟲 2026-03-29 | 12/600 |
|
|
[考研] 一志愿085600中科院寧波所276分求調(diào)劑 +12 | 材料學(xué)257求調(diào)劑 2026-03-28 | 13/650 |
|
|
[考研] 一志愿西電085401數(shù)一英一299求調(diào)劑 六級(jí)521 +4 | 愛吃大鴨梨 2026-03-31 | 4/200 |
|
|
[考研] 274求調(diào)劑 +6 | xiao愛同學(xué) 2026-03-30 | 6/300 |
|
|
[考研] 一志愿食品科學(xué)與工程083200求調(diào)劑 +4 | XQTJZ 2026-03-30 | 4/200 |
|
|
[考研] 材料專碩 085600求調(diào)劑 +7 | BBQ233 2026-03-30 | 7/350 |
|
|
[考研] 303求調(diào)劑 +7 | DLkz1314. 2026-03-30 | 7/350 |
|
|
[考研] 求調(diào)劑 +7 | 青春裁為三截 2026-03-29 | 7/350 |
|
|
[考研] 一志愿中南大學(xué)化學(xué)0703總分337求調(diào)劑 +6 | niko- 2026-03-27 | 6/300 |
|
|
[考研] 求調(diào)劑 +10 | 張zz111 2026-03-27 | 11/550 |
|
|
[考研] 2026年華南師范大學(xué)歡迎化學(xué),化工,生物,生醫(yī)工等專業(yè)優(yōu)秀學(xué)子加入! +3 | llss0711 2026-03-28 | 6/300 |
|
|
[考研] 315分求調(diào)劑 +7 | 26考研上岸版26 2026-03-26 | 7/350 |
|
|
[考研] 0703化學(xué)求調(diào)劑,各位老師看看我。! +5 | 祁祺祺 2026-03-25 | 5/250 |
|
|
[考研] 調(diào)劑 +3 | 李嘉圖·S·路 2026-03-27 | 3/150 |
|
|
[考研] 各位老師您好:本人初試372分 +5 | jj涌77 2026-03-25 | 6/300 |
|