세 번의 반복에서 논리 원을 작성한 다음 간단한 결과를 인쇄하는 간단한 응용 프로그램을 작성합니다. 우선, 프로세스 0에서 Send Send와 Recv를 사용하고 있습니다. Send와 Recv를 사용하고 있습니다. 마지막 n-1 프로세스는 프로세스 0으로 전송됩니다. 프로세스 0에서 나는이 코드를 메인에 가지고 있습니다 :MPI - 프로세스의 논리 순환
int i;
MPI_Status status;
MPI_Init(&argc, &argv);
MPI_Comm_size(MPI_COMM_WORLD,&numtasks);
MPI_Comm_rank(MPI_COMM_WORLD;&myrank);
if(myrank==0){
for(i=0;i<3;i++){
MPI_Send(msg,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
MPI_Recv(msg,100,MPI_CHAR, numtasks-1,99,MPI_COMM_WORLD,&status);
printf("hello");
}
}
else if(myrank==(numtasks-1)){
MPI_Recv(msg,100,MPI_CHAR,numtasks-2,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,0,99,MPI_COMM_WORLD);
}
else{
MPI_Recv(msg,100,MPI_CHAR,myrank-1,99,MPI_COMM_WORLD,&status);
MPI_Send(msg,100,MPI_CHAR,myrank+1,99,MPI_COMM_WORLD);
}
지금 나는 3 가지 결과를 얻으려고하고 있습니다. 하지만 여전히 나는 하나만 얻고 있습니다. 나머지 코드는 간단합니다. 0 이외의 프로세스는 myrank-1 (myrank는 실제 프로세스 번호)에서 수신하여 rank + 1로 전송합니다. 여전히 이해가 안됩니다. 아이디어를 제공해 주셔서 감사합니다.
+1 나를 이길. (차단하는 방법에 대한 귀하의 답변이 수정되었습니다.) – chrisaycock
@chrisaycock : Ah; 'MPI_Waitall'은 친숙한 것 같습니다. :-) +1. –
첫 번째 프로세스는 MPI_Send로 시작하고 다른 프로세스는 MPI_Recv로 시작한 다음 MPI_Send로 계속 진행합니다. 그리고 그 이상한 내게, 그것은 단지 한 번하고 아무 것도하지 않을 것입니다. 심지어 3 번 가버 리더라도 ... – Waypoint