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 |