Funktionsübersicht
. .
Kollektive Operationen
Hilfesystem für den Message Passing Interface Standard MPI
MPI_Scatter
Verteilt Daten vom Prozeß 'root' unter alle anderen Prozesse in
der Gruppe, so daß, soweit es aufgeht, alle Prozesse gleichgroße
Anteile erhalten
Syntax:
MPI_Scatter(sendbuf, sendcount, sendtype, recvbuf, recvcount,
recvtype, root, comm)
Input Parameter:
sendbuf - Anfangsadresse des Sendepuffers (Wert ist
lediglich für 'root' signifikant)
sendcount - Anzahl der Elemente, die jeder Prozeß geschickt
bekommen soll (integer)
sendtype - Datentyp der Elemente in sendbuf (handle)
recvcount - Anzahl der Elemente im Empfangspuffer (integer)
Meist ist es günstig, recvcount = sendcount zu wählen.
recvtype - Datentyp der Elemente des Empfangspuffers (handle)
root - Rang des Prozesses in comm, der die Daten versendet
(integer)
comm - Kommunikator (handle)
Output Parameter:
recvbuf - Adresse des Empfangsbuffers; auch 'root' findet
seinen Anteil an Daten nach der Operation dort
Anmerkung:
Der Sendepuffer (seine Größe sei n Elemente) wird in Teile der
Länge n / Gruppengröße geteilt und mit Prozeß 0 beginnend
verteilt. Sollte die Division nicht aufgehen, erhalten die ersten
Prozesse um 1 größere Teile und der Prozeß mit der höchsten ID
den Rest.
Aufruf:
#include "mpi.h"
#define ROOT 0
int myid, bufsize;
int *sendbuf, *recvbuf;
if (myid==ROOT) {
...
... sendbuf holen / belegen ...
bufsize= 'berechnen, wieviele Daten jeder bekommt'
}
MPI_Bcast(&bufsize, 1, MPI_INT, ROOT, MPI_COMM_WORLD);
recvbuf=malloc(bufsize*sizeof(int));
MPI_Scatter(sendbuf, bufsize, MPI_INT, recvbuf, bufsize,
MPI_INT, ROOT, MPI_COMM_WORLD);
...
Beispiel