status.MPI_SOURCE — ранг процесса-отправителя принятого
сообщения;
status.MPI_TAG — тег принятого сообщения.
Приведенные значения MPI_ANY_SOURCE и MPI_ANY_TAG
иногда называют джокерами.
Значение переменной status позволяет определить количество
элементов данных в принятом сообщении при помощи функции:
int MPI_Get_count(MPI_Status *status, MPI_Datatype type,int *count), где
• status — статус операции MPI_Recv;
• type — тип принятых данных;
• count — количество элементов данных в сообщении.
Вызов функции MPI_Recv не обязан быть согласованным со
временем вызова соответствующей функции передачи сообщения
MPI_Send – прием сообщения может быть инициирован до момента, в
момент или после момента начала отправки сообщения.
По завершении функции MPI_Recv в заданном буфере памяти будет
располагаться принятое сообщение. Так как функция MPI_Recv является
блокирующей
для
процесса-получателя,
его
выполнение
приостанавливается до завершения работы функции. Таким образом, если
по каким-то причинам ожидаемое для приема сообщение будет
отсутствовать, выполнение параллельной программы будет блокировано.
2.4.2 Обмен сообщениями без блокировки В отличие от функций с блокировкой, возврат из функций данной
группы происходит сразу без какой-либо блокировки процессов. На фоне
дальнейшего выполнения программы одновременно происходит и
обработка асинхронно запущенной операции. Данная возможность
полезна для создания эффективных программ. В самом деле, программист
знает, что в некоторый момент ему потребуется массив, который
вычисляет другой процесс. Он заранее выставляет в программе
18
асинхронный запрос на получение данного массива, а до того момента,
когда массив реально потребуется, он может выполнять любую другую
полезную работу. Опять же, во многих случаях совершенно не
обязательно дожидаться окончания посылки сообщения для выполнения
последующих вычислений.