Код: Выделить всё
int ping_pong_count = 0;
int partner_rank = (world_rank + 1) % 2;
while (ping_pong_count < PING_PONG_LIMIT) {
if (world_rank == ping_pong_count % 2) {
// Increment the ping pong count before you send it
ping_pong_count++;
MPI_Send(&ping_pong_count, 1, MPI_INT, partner_rank, 0,
MPI_COMM_WORLD);
printf("%d sent and incremented ping_pong_count "
"%d to %d\n", world_rank, ping_pong_count,
partner_rank);
} else {
MPI_Recv(&ping_pong_count, 1, MPI_INT, partner_rank, 0,
MPI_COMM_WORLD, MPI_STATUS_IGNORE);
printf("%d received ping_pong_count %d from %d\n",
world_rank, ping_pong_count, partner_rank);
}
}
Итак, для процесса0 значение ping_pong_count изменилось с 0 на 10, поэтому выходные данные для процесса0 это
Код: Выделить всё
#ping_pong_count = 0, so ping_pong++ is 1
0 sent 1 to 1
#ping_pong = 1, go to the else logic
0 received 2 from 1
...
Но процесс1 ничего не отправил процессу0? значит, MPI_Recv не вызовет ошибку?
Если с точки зрения процесса1, он отправляет что-то в процесс0, но MPI_Send происходит несколько раз, когда ping_pong_count % 2 == 1 для процесса1, так какой ping_pong_count передается между процессом0 и процессом1?
Подробнее здесь: https://stackoverflow.com/questions/784 ... ng-example