Funktionsübersicht
. .
Blockierende Kommunikation
Hilfesystem für den Message Passing Interface Standard MPI
MPI_Sendrecv_replace
Senden und Empfangen einer Nachricht im gleichen Puffer (blockierend)
Syntax:
MPI_Sendrecv_replace(buf, count, datatype, dest, sendtag, source, recvtag, comm, status)
Input Parameter:
count - Anzahl Elemente im Puffer (integer,
nichtnegativ)
datatype - Typ der Elemente im Puffer (handle)
dest - Rang des Empfängerprozesses in comm (integer)
sendtag - message tag fürs Senden (integer)
source - Rang des Senderprozesses in comm (integer) oder MPI_ANY_SOURCE
recvtag - tag der zu empfangenden Nachricht oder MPI_ANY_TAG (integer)
comm - Kommunikator (handle)
Output Parameter:
status - Status, welcher source und tag angibt (MPI_Status)
Inout Parameter:
buf - Anfangsadresse des Puffers
Anmerkung:
Die gesendete Nachricht wird durch die empfangene ersetzt.
Aufruf:
Weiterschieben von Daten des gleichen Typs in einem Ring
#include "mpi.h"
int myid, numprocs, pred, succ;
int count;
void *buf;
MPI_Datatype datatype;
MPI_Comm comm;
MPI_Status status;
...
MPI_Comm_size(comm, &numprocs);
MPI_Comm_rank(comm, &myid);
succ=(myid+1)%(numprocs);
pred=(myid+numprocs-1)%(numprocs);
...
MPI_Sendrecv_replace(buf, count, datatype, succ, 99, pred,
MPI_ANY_TAG, comm, &status);
...