我想在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