Funktionsübersicht . . Kollektive Operationen

Hilfesystem für den Message Passing Interface Standard MPI


MPI_Scatterv

Verteilt Daten vom Prozeß 'root' unter alle anderen Prozesse in der Gruppe. Dabei können die einzelnen Prozesse unterschiedlich viele Elemente erhalten.

Syntax:

Input Parameter: Output Parameter: Aufruf:

Annahme für das Beispiel: man hat 10 Prozesse und sendbuf sei eine 10x10 Matrix beim Prozeß 0. Die obere Dreiecksmatrix soll zeilenweise an alle 10 Prozesse verteilt werden.


#include "mpi.h"
...
#define ROOT   0
#define MAXX   10
#define MAXY   10

    int           myid, numprocs, i, offset;
    int           *counts, *displs;
    void          *sendbuf, *recvbuf;
    MPI_Comm      comm;
    MPI_Datatype  recvtype;

    ...
    MPI_Comm_size(comm, &numprocs);
    MPI_Comm_rank(comm, &myid);
    ...
    counts=(* int)malloc(numprocs*sizeof(int));
    displs=(* int)malloc(numprocs*sizeof(int));

    offset=0;
    for (i=0; i<numprocs; i++) {
	counts[i]=MAXX-i;
	displs[i]=offset;
	offset   =offset+MAXX;
    }
    MPI_Scatterv(sendbuf, counts, displs, MPI_INT, 
                 recvbuf, count[myid], recvtype, 
                 ROOT, comm);
    ...