Допустим, у меня 3 ранга.
Ранг 0 получает 1 MPI_INT
с ранга 1 и получает 10 MPI_INT
с ранга 2:
MPI_Recv(buf1, 1, MPI_INT,
1, 0, MPI_COMM_WORLD, &status);
MPI_Recv(buf2, 10, MPI_INT,
2, 0, MPI_COMM_WORLD, &status);
Ранг 1 и ранг 2 отправляют 1 и 10 MPI_INT
на ранг 0 соответственно. MPI_Recv - это блокирующий вызов. Предположим, что 10 MPI_INIT
из ранга 2 прибывают до 1 MPI_INT
из ранга 1. В этот момент блоки ранга 0 ожидают данных из ранга 1.
В этом случае может ли вернуться первый MPI_Recv
? Сначала поступают данные из ранга 2, но данные не помещаются в buf1, который может содержать одно целое число.
И тогда приходит сообщение с ранга 1. Может ли MPI выбрать это сообщение и позволить первому MPI_Recv
вернуться?