将主/从模型与MPI同步

ezz*_*rem 4 c synchronization mpi master-slave

我有一个使用MPI同步主/从进程的问题.我希望主控制从属执行的顺序.Eeach奴隶必须做:1-读2过程.这是我的代码:

int main(int argc, char* argv []){

int rank,numprocess;

MPI_Init( &argc, &argv );
MPI_Comm_rank( MPI_COMM_WORLD, &rank );
MPI_Comm_size( MPI_COMM_WORLD, &numprocess );


if(rank==0){ //master

    MPI_Status s;int Sstate=1;int Rstate;

    int p;
    for(p=1;p<numprocess;p++){

        fflush(stdout);printf("master : order P%d to start reading\n",p);
        MPI_Send(&Sstate, sizeof(int), MPI_INT, p, 20, MPI_COMM_WORLD);

        MPI_Recv(&Rstate,sizeof(int),MPI_INT,p,21,MPI_COMM_WORLD,&s);
        fflush(stdout);printf("master : P%d finished reading\n",p);
    }

}
else{ //workers

    int state; MPI_Status s;
    MPI_Recv(&state,sizeof(int),MPI_INT,0,20,MPI_COMM_WORLD,&s);

    //read here
    Sleep(1000);

    //send to master : finish reading
    state=2;
    MPI_Send(&state, sizeof(int), MPI_INT, 0, 21, MPI_COMM_WORLD);

    //processing
    Sleep(3000);
    fflush(stdout);printf("worker %d ended processing\n",rank);
}

MPI_Finalize();
return 0;
}
Run Code Online (Sandbox Code Playgroud)

我的问题是最后一个过程.事实上它并没有像其他人那样行事.这是我的输出:

mpiexec -n 4 master.exe
master : order P1 to start reading 
master : p1 finished reading
master : order P2 to start reading 
master : p2 finished reading
master : order P3 to start reading 
worker 1 ended processing 
worker 2 ended processing 
master : p3 finished reading
worker 3 ended processing 
Run Code Online (Sandbox Code Playgroud)

为什么第三个进程不同步?谢谢你的宝贵帮助!

use*_*116 6

对于多线程或多进程架构,您所展示的是Normal.基本上,在您的进程调用MPI_Send主进程之后,它们将被释放以自行运行,因为它们没有更多的阻塞MPI调用.因此,他们睡觉后,他们打印他们的结束声明,彼此独立和主人本身!

下面我有一个图表,我希望能够说明你所看到的:

打印独立发生