Понимание примера пинг-понга MPILinux

Ответить Пред. темаСлед. тема
Anonymous
 Понимание примера пинг-понга MPI

Сообщение Anonymous »

Я следую этому руководству https://mpitutorial.com/tutorials/mpi-send-and-receive/

Код: Выделить всё

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);
}
}
Насколько я понимаю, в MPI каждый процесс параллельно запускает один и тот же код.
Итак, для процесса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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Linux»