我想在Windows上使用MPI(MPICH2)。我寫這個命令:MPI Barrier C++
MPI_Barrier(MPI_COMM_WORLD);
而且我希望它阻止所有處理器,直到所有組成員都調用它。但這不會發生。我添加一個示意性的我的代碼:
int a;
if(myrank == RootProc)
a = 4;
MPI_Barrier(MPI_COMM_WORLD);
cout << "My Rank = " << myrank << "\ta = " << a << endl;
(帶2處理器:)根處理器(0
)正確地起作用,但與秩1的處理器不知道a
變量,所以它顯示-858993460
代替4
。
任何人都可以幫助我嗎?
Regards
謝謝。這是真的,但我有另一個問題。據我所知,在所有組成員調用它之前,屏障阻止調用者,但是我測試並看到進程1傳遞此函數(通過編寫句子cout)和根進程(0)在屏障之前。有什麼問題?謝謝 – aryan 2010-01-13 21:35:15
你不能相信來自不同進程的輸出語句的順序。如果您不確定,請確保您的時鐘同步並在屏障之前和之後輸出'time()'。 – eduffy 2010-01-14 01:57:54
不要指望不同處理器上的時鐘處於如此接近的同步狀態,以至於它們報告的時間允許您正確地對輸出語句進行排序。 MPI_Barrier同步進程,而不是時鐘。 – 2010-01-14 02:31:20