當調用MPI_BCAST時,是否有隱含的同步?例如,如果發件人進程在其他人能夠執行BCAST之前到達MPI_BCAST,然後在沒有任何確認的情況下繼續執行?與像代碼一些最近的測試:隱含的發送者和接收者同步MPI_BCAST?
program test
include 'mpif.h'
integer ierr, tid, tmp
call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, tid, ierr)
tmp = tid
if(tid.eq.0) then
call MPI_BCAST(tmp,1,MPI_INTEGER,MPI_ROOT,MPI_COMM_WORLD, ierr)
else
endif
write(*,*) tid,'done'
call MPI_FINALIZE(ierr)
end
顯示,隨着兩個線程,他們都達到完成,儘管只有發送者在做MPI_BCAST通話。
輸出:
1 done 0
0 done 0
難道這是與MPI安裝我與(MPICH)工作出了問題,或者是MPI這個標準的行爲嗎?
OK,我已經把那我的工作完整的程序。我希望它無限期地阻塞等待別人叫MPI_BCAST如果的mpirun與超過100個處理器的推出,但在我的機器上有兩個過程使得調用write退出,與TMP – agrippa
值0它並不需要阻止 - 根不需要任何來自其他隊伍的響應來繼續,所以它可能不會等待它們。特別是,在一個急切的消息協議中,根將立即發送它的消息,並且它將坐在另一個隊列中的一些緩衝區中,直到他們調用MPI_Bcast。 –
@Jeremiah:不正確。 MPI標準要求在'Bcast'返回時,根緩衝區的內容已被複制到所有進程。 @ user631027:在你的程序,進程'Bcast' 0塊,但過程1立即到達'Finalize',減少MPI_COMM_WORLD的大小爲1。因此,進程0現在可以自由地完成'Bcast',因爲他是唯一一個廣播到。如果進程1調用與進程0不匹配的'Bcast',則程序將掛起。 – suszterpatt