我的MPI程序中有一个主从模型。我想在进行下一次迭代之前让奴隶等待对方。
if (rank == 0) {
// master process
} else {
// slave process
for (int i = 0; i < 10; i++) {
// do stuff
// wait for all slaves to end iteration i
}
}
基本上,我不希望任何处理器进入下一次迭代,而其他所有从站都不会完成当前的迭代。我怎样才能做到这一点?使用MPI_Barrier
?
答案 0 :(得分:3)
您可以创建包含所有从属进程的通信器,并在MPI_Barrier()
上使用它。
为了创建这个通信器,最简单/最安全的是以这种方式使用MPI_Comm_split()
:
MPI_Comm slaves;
MPI_Comm_split( MPI_COMM_WORLD, ( rank == 0 ), rank, &slaves );
这实际上将全局创建2个通信器:一个仅包含主进程,另一个包含除主服务器之外的所有进程。
对于实际使用,您可以这样做:
if (rank == 0) {
// master process
} else {
// slave process
for (int i = 0; i < 10; i++) {
// do stuff
// wait for all slaves to end iteration i
MPI_Barrier( slaves );
}
}