Syntax:
Sofern nicht die darunterliegende Schicht ('device') einen
Broadcast bereits implementiert hat, verwendet MPI einen
baumartigen Algorithmus um die Nachricht zu Blöcken von Prozessen
zu schicken. Mit einem linearen Algorithmus wird sie dann vom
ersten Prozeß des Blocks an alle anderen verteilt.
MPIR_BCAST_BLOCK_SIZE bestimmt die Größe dieser Prozeßblöcke.
MPIR_BCAST_BLOCK_SIZE = 1 bedeutet: es wird ein reiner
Baum-Algorithmus verwendet.
MPIR_BCAST_BLOCK_SIZE <= Größe der Prozeßgruppe von comm bedeutet:
es wird ein rein linearer Algorithmus verwendet.
Dieser Wert sollte eingestellt werden, um die höchstmögliche
Effizienz auf verschieden Rechnern zu erzielen.
Aufruf:
#include "mpi.h"
#define ROOT 0
int myid, *buffer, bufsize;
...
MPI_Comm_rank(MPI_COMM_WORLD, &myid);
if (myid==ROOT) {
... Daten holen/erzeugen ...
MPI_Bcast(buffer, bufsize, MPI_INT, ROOT, MPI_COMM_WORLD);
...
}
else {
...
buffer=malloc(bufsize * sizeof( int));
MPI_Bcast(buffer, bufsize, MPI_INT, ROOT, MPI_COMM_WORLD);
...
}
...
Beispiel