2013-10-17 77 views
1

我在MPI編程上有點新手(mpich2 fedora)。 我正在寫因爲,當MPI_Barrier與另一個與MPI_COMM_WORLD不同的通信器時,我得到了死鎖。如何將MPI_Brier與另一個通信器一起使用?

我使2個傳播者這樣的:

MPI_Comm_split(MPI_COMM_WORLD,顏色,等級,& split_comm);

如果我把一個MPI_Barrier所有的顏色都可以通過,它會沒事的。

但是,如果我把MPI_Barrier只有顏色== 1可以通過,我有死鎖。

如何將MPI_Brier與另一個通信器一起使用? 我也在使用MPI_Bcast()(與另一個不同的通信器MPI_COMM_WORLD),但是當沒有人調用MPI_Bcast時,它也沒有被阻塞。一個與MPI_COMM_WORLD不同的通信器可以同步你自己的進程嗎?

回答

1

如果您可以發佈代碼段,這將有所幫助。單單從單詞中調整死鎖就很困難。

在任何情況下,你傳遞你想阻止作爲參數傳遞給MPI_Barrier溝通: http://mpi.deino.net/mpi_functions/mpi_barrier.html http://www.mcs.anl.gov/research/projects/mpi/www/www3/MPI_Barrier.html

MPI_Bcast是阻塞函數。所以,如果一個或多個隊伍沒有達到MPI_Bcast調用,那麼你可能會陷入僵局。

請記住,即使在MPI_Comm_Split調用之後,MPI_COMM_WORLD也會包含所有等級。

+3

有關'MPI_Bcast'具有隱式屏障的聲明根本不是真的。該標準允許任何進程在其操作完成後立即退出集體調用,從而實現優化實施。唯一的例外是'MPI_Barrier',它總是**全局同步。 –

+0

感謝您對隱含屏障的澄清。你完全正確。我編輯了我的評論以消除這一點。 –

相關問題