Основы MPI: Шесть основных функций |
Получение сообщения
Передача сообщения в MPI-1 требует двухстороннюю коммуникацию (связь).
Одностороняя коммуникация является одной из черт, добавленной в MPI-2.
Каждый раз, когда один процесс отправляет сообщение, другой процесс должен явно
получить сообщение. Итак, для каждого места в вашем приложении, в котором Вы вызываете
функцию MPI отправки, должно быть соответствующее место, где Вы вызываете
функцию MPI получения. Следует проявить заботу, чтобы увериться в том, что параметры
отправки и получения сочетаются. Это будет обсуждаться более детально в этом модуле.
Подобно MPI_Send, MPI_Recv является блокирующей. Это означает, что вызов не возвращает
управление в вашу программу до тех пор пока все полученные данные не будут запомнены в
переменной(ых), которые Вы точно определили в листе параметров. Из-за этого, Вы
можете использовать эти данные после вызова и быть уверены, что все они здесь.
(Существуют неблокирующие получения, в которых это не так.)
- int MPI_Recv(void *buf, int count, MPI_Datatype datatype, int source, int tag, MPI_Comm comm, MPI_Status *status)
Параметры:
- buf - начало буфера, в котором входящие данные должны
быть запомнены. Для C это - адрес.
- count - число элементов (не байт) в вашем буфере получателя
- datatype - тип данных
- source - ранг процесса, от которого данные будут приняты
(Он может быть любым (джокером, дикой картой) при задании параметром MPI_ANY_SOURCE)
- tag - произвольное число, которое можно использовать для отличия от других сообщений
(оно может быть любым (дикой картой) при задании параметром MPI_ANY_TAG)
- comm - (определенный) коммуникатор
- status - массив или структура возвращаемой информации.
Например, если Вы определяете дикой картой источник source или тег tag,
статус скажет Вам действительный ранг или тег для
полученного сообщения
- (ierror - возвращаемый функцией код ошибки).