Funktionsübersicht
. .
Blockierende Kommunikation
Hilfesystem für den Message Passing Interface Standard MPI
MPI_Recv
Empfangen einer Nachricht (blockierend)
Syntax:
MPI_Recv(buf, count, datatype, source, tag, comm, status)
Output Parameter:
buf - Anfangsadresse des Empfangspuffers
status - Status, welcher source und tag angibt (MPI_Status)
Input Parameter
count - Anzahl der Elemente im Empfangspuffer (integer,
nichtnegativ)
datatype - Typ der zu empfangenden Elemente (handle)
source - Rang des Senderprozesses in comm oder MPI_ANY_SOURCE
(integer)
tag - message tag zur Unterscheidung verschiedener Nachrichten
(integer)
Ein Kommunikationsvorgang wird durch ein Tripel (Sender, Empfänger, tag)
eindeutig beschrieben. Um Nachrichten mit beliebigen tags zu empfangen,
benutzt man die Konstante MPI_ANY_TAG.
comm - Kommunikator (handle)
Anmerkung:
Das Argument 'count' gibt die maximale Länge einer Nachricht an.
Wieviele Elemente tatsächlich empfangen wurden, läßt sich mit
MPI_Get_count ermitteln.
Aufruf:
#include "mpi.h"
int msglen, again=1;
void *buf;
MPI_Datatype datatype
MPI_Comm comm;
MPI_Status status;
...
while (again) {
MPI_Probe(ROOT, MPI_ANY_TAG, comm, &status);
MPI_Get_count(&status, datatype, &msglen);
buf=malloc(msglen*sizeof(int));
MPI_Recv(buf, msglen, datatype, status.MPI_SOURCE, status.MPI_TAG,
comm, &status);
...
}
...
Beispiel