我在使用MPI同步主/從進程時遇到問題。 我希望主控制奴隸執行的順序。每個奴隸必須這樣做:1-讀取2個過程。 這裏是我的代碼:使用MPI同步主/從模型
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;
}
我的問題是與最後一個過程。事實上,它沒有像其他人一樣行事。這裏是我的輸出:
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
爲什麼第三個進程不同步? 感謝您寶貴的幫助!
爲什麼你認爲它是不同步? – user7116