【发布时间】:2014-01-17 14:54:36
【问题描述】:
我正在尝试使用 MPI 实现一个程序,为此我需要在特定处理器中执行一段代码,并且在执行完成之前其他处理器必须等待。我认为可以使用 MPI_Barrier (虽然我不清楚它的实际功能)并尝试了以下程序。
#include<mpi.h>
#include<stdio.h>
int main(int argc, char **argv) {
int rank=0,size;
MPI_Init(&argc,&argv);
MPI_Comm_rank(MPI_COMM_WORLD,&rank);
MPI_Comm_size(MPI_COMM_WORLD,&size);
if(rank == 0){ //Block 1
printf("\nRank 0 Before Barrier");
}
MPI_Barrier(MPI_COMM_WORLD);
if(rank==1){
printf("\nRank 1 After Barrier");
printf("\nRank 1 After Barrier");
}
if(rank==2){
printf("\nRank 2 After Barrier");
}
MPI_Finalize();
}
当我使用 np as 3 执行时得到以下输出
Rank 1 After Barrier
Rank 0 Before BarrierRank 2 After BarrierRank 1 After Barrier
我怎么可能让其他处理器等到 Block 1 在 Rank 0 的处理器中完成它的执行?
预期输出
Rank 0 Before Barrier
Rank 1 After Barrier //After this, it might be interchanged
Rank 1 After Barrier
Rank 2 After Barrier
【问题讨论】:
-
MPI_Barrier() 阻塞所有进程,直到所有进程都到达屏障。
-
尝试在每个
printf语句后添加fflush(stdout);。 -
那个或者做 fprintf(stderr...)。 stderr 默认是无缓冲的。