使用MPI_Barrier()來同步迭代步驟之間的數據是不錯的主意。請參閱下面的僞代碼。我可以使用MPI_Barrier()來同步迭代步驟之間的數據嗎?
While(numberIterations< MaxIterations)
{
MPI_Iprobe() -- check for incoming data
while(flagprobe !=0)
{
MPI_Recv() -- receive data
MPI_Iprobe() -- loop if more data
}
updateData() -- update myData
for(i=0;i<N;i++) MPI_Bsend_init(request[i]) -- setup request
for(i=0;i<N;i++) MPI_Start(request[i]) -- send data to all other N processors
if(numberIterations = MaxIterations/2)
MPI_Barrier() -- wait for all processors -- CAN I DO THIS
numberIterations ++
}
我的想法是在兩者之間等待,以便所有N處理器都能趕上。有沒有更好的方法來完成這個? – Naga 2012-03-31 23:53:45
他們**是否需要**趕上?如果屏障不在那裏,程序是否會給出不正確的結果? – suszterpatt 2012-04-01 00:30:22
沒有..但我運行緩衝區/死鎖問題與更高的迭代。程序工作正常,最多6000次迭代。除此之外的任何東西......我不幸運。 – Naga 2012-04-01 01:01:34