Freigeben über


MPI_Recv-Funktion

Führt einen Empfangsvorgang aus und gibt erst zurück, wenn eine übereinstimmende Nachricht empfangen wird.

Syntax

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

Parameter

  • buf [in, optional]
    Ein Zeiger auf den Puffer, der die zu sendenden Daten enthält.

  • count
    Die Anzahl der Elemente im Puffer. Wenn der Datenteil der Nachricht leer ist, legen Sie den count-Parameter auf 0 fest.

  • datatype
    Der Datentyp der Elemente im Pufferarray.

  • source
    Der Rang des Sendeprozesses innerhalb des angegebenen Kommunikators. Geben Sie die MPI_ANY_SOURCE Konstante an, um anzugeben, dass eine beliebige Quelle akzeptabel ist.

  • tag
    Das Nachrichtentag, das verwendet wird, um verschiedene Nachrichtentypen zu unterscheiden. Geben Sie die MPI_ANY_TAG Konstante an, um anzugeben, dass ein beliebiges Tag akzeptabel ist.

  • comm
    Das Handle für den Communicator.

  • status [out]
    Enthält bei der Rückgabe einen Zeiger auf eine MPI_Status Struktur, in der Informationen über die empfangene Nachricht gespeichert werden.

Rückgabewert

Gibt MPI_SUCCESS nach Erfolg zurück. Andernfalls ist der Rückgabewert ein Fehlercode.

In Fortran wird der Rückgabewert im IERROR-Parameter gespeichert.

Fortran

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

Hinweise

Die Länge der empfangenen Nachricht muss kleiner oder gleich der Länge des Empfangspuffers sein. Diese Funktion gibt einen Überlauffehler zurück, wenn nicht alle eingehenden Daten in den Empfangspuffer passen.

Wenn die empfangene Nachricht kürzer als der Puffer ist, wird nur der Teil des Puffers geändert, der der Nachricht entspricht. Der rest des Puffers wird nicht geändert.

Prozesse können Nachrichten an sich selbst senden. Es ist jedoch unsicher, dies mit den blockierenden Sende- und Empfangsvorgängen zu tun, MPI_Send und MPI_Recv, da diese blockierenden Sende- und Empfangsvorgänge zu einem Deadlock führen können.

Hinweis

Es gibt eine Asymmetrie zwischen Sende- und Empfangsvorgängen. Ein Empfangsvorgang kann Nachrichten von einem beliebigen Absender akzeptieren, aber ein Sendevorgang muss einen eindeutigen Empfänger angeben. Dadurch wird ein Push-Kommunikationsstil implementiert, bei dem die Datenübertragung vom Absender erfolgt, und nicht durch einen Pullstil, bei dem die Datenübertragung vom Empfänger ausgeführt wird.

 

Anforderungen

Produkt

HPC Pack 2012 MS-MPI Redistributable Package, HPC Pack 2008 R2 MS-MPI Redistributable Package, HPC Pack 2008 MS-MPI Redistributable Package oder HPC Pack 2008 Client Utilities

Header

Mpi.h; Mpif.h

Bibliothek

Msmpi.lib

DLL

Msmpi.dll

Weitere Informationen

MPI-Punkt-zu-Punkt-Funktionen

MPI_Send

MPI_Irecv

MPI_Datatype

MPI_Comm

MPI_Status