MPI Barrier C++

ary*_*yan 0 mpi barrier

我想在Windows上使用MPI(MPICH2).我写这个命令:

MPI_Barrier(MPI_COMM_WORLD);  
Run Code Online (Sandbox Code Playgroud)

我希望它会阻止所有处理器,直到所有组成员都调用它.但事实并非如此.我添加了我的代码示意图:

int a;  
if(myrank == RootProc)  
   a = 4;  
MPI_Barrier(MPI_COMM_WORLD);  
cout << "My Rank = " << myrank << "\ta = " << a << endl;  
Run Code Online (Sandbox Code Playgroud)

(使用2个处理器:)根处理器(0)正常工作,但是具有等级1的处理器不知道a变量,因此它显示-858993460而不是4.

谁能帮我?
问候

edu*_*ffy 7

您只是a在进程0中进行分配.MPI不共享内存,因此如果您希望a进程1获取值4,则需要MPI_Send从进程0和MPI_Recv进程1 进行调用.

  • 直到你完成了很多MPI编程,比如几年的扎实练习,我认为你甚至不应该让你想到MPI_Barrier工作不正常.我曾经使用的所有MPI库都是在产品质量很高的组织中编写的.如果你认为障碍有问题,那么你(在思考或编码中)犯错误的可能性绝大于障碍本身的错误. (4认同)