Поделиться через


функция MPI_Recv

Выполняет операцию получения и не возвращается, пока не будет получено соответствующее сообщение.

Синтаксис

int MPIAPI MPI_Recv(
  _In_opt_ void         *buf,
           int          count,
           MPI_Datatype datatype,
           int          source,
           int          tag,
           MPI_Comm     comm,
  _Out_    MPI_Status   *status
);

Параметры

  • buf [in, необязательный]
    Указатель на буфер, содержащий отправляемые данные.

  • count
    Количество элементов в буфере. Если часть данных сообщения пуста, задайте для параметра count значение 0.

  • datatype
    Тип данных элементов в буферном массиве.

  • source
    Ранг процесса отправки в указанном коммуникаторе. Укажите константу MPI_ANY_SOURCE , чтобы указать, что любой источник является допустимым.

  • Тег
    Тег сообщения, используемый для различения различных типов сообщений. Укажите константу MPI_ANY_TAG , чтобы указать, что любой тег допустим.

  • Comm
    Дескриптор для коммуникатора.

  • status [out]
    При возврате содержит указатель на структуру MPI_Status , в которой хранятся сведения о полученном сообщении.

Возвращаемое значение

Возвращает MPI_SUCCESS об успешном выполнении. В противном случае возвращаемое значение является кодом ошибки.

В Fortran возвращаемое значение хранится в параметре IERROR .

Fortran

    MPI_RECV(BUF, COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS, IERROR)
        <type> BUF(*)
        INTEGER COUNT, DATATYPE, SOURCE, TAG, COMM, STATUS(MPI_STATUS_SIZE), IERROR

Комментарии

Длина полученного сообщения должна быть меньше или равна длине буфера приема. Эта функция возвращает ошибку переполнения, если все входящие данные не помещаются в буфер приема.

Если полученное сообщение короче буфера, изменяется только часть буфера, соответствующая сообщению. Оставшаяся часть буфера не изменяется.

Процессы могут отправлять сообщения себе. Однако это небезопасно делать с блокирующими операциями отправки и получения, MPI_Send и MPI_Recv, так как эти блокирующие операции отправки и получения могут привести к взаимоблокировке.

Примечание

Существует асимметрия между операциями отправки и получения. Операция получения может принимать сообщения от произвольного отправителя, но операция отправки должна указывать уникального получателя. Это реализует стиль push-связи, в котором передача данных осуществляется отправителем, а не стилем извлечения, в котором передача данных осуществляется получателем.

 

Требования

Продукт

Распространяемый пакет HPC 2012 MS-MPI, пакет HPC 2008 R2 распространяемый пакет MS-MPI, пакет HPC 2008 MS-MPI распространяемый пакет или служебные программы клиента ПАКЕТА HPC 2008

Заголовок

Mpi.h; Mpif.h

Библиотека

Msmpi.lib

DLL

Msmpi.dll

См. также раздел

Функции типа "точка — точка" MPI

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status