2015-01-03 41 views
6

Qualcuno può spiegare quali sono le differenze tra MPI_Scatter e MPI_Bcast? (Oltre al fatto che qualsiasi processo può trasmettere usando MPI_Scatter e solo root può usare MPI_Bcast)Differenze tra MPI_Scatter e MPI_Bcast

In quali casi dovrei usare il primo sull'altro?

risposta

11

MPI_Bcast() invia lo stesso pezzo di dati a tutti, mentre MPI_Scatter() invia ogni processo una parte della matrice di input. MPI_Bcast() è l'opposto di MPI_Reduce() e MPI_Scatter() è l'opposto di MPI_Gather(). Un piccolo schema come this one è auto-esplicativo.

E sia MPI_Scatter() sia MPI_Bcast() hanno un argomento denominato int root per specificare il processo di root.

+0

Grazie, molto comprensibile. –

+6

Mentre 'MPI_SCATTER' è effettivamente l'opposto di' MPI_GATHER', non chiamerei 'MPI_BCAST' l'opposto di' MPI_REDUCE'. –

+2

A destra, 'MPI_Reduce()' può combinare i pezzi di dati in molti diversi [modi] (http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node78.html), come 'MPI_SUM' o' MPI_MAX' e 'MPI_Bcast()' forniscono lo stesso pezzo di dati per ogni processo, senza alcuna operazione in corso. – francis

1

MPI_Bcast acquisisce un singolo elemento di dati nel processo di root (la casella rossa) e lo copia in tutti gli altri processi. MPI_Scatter prende una serie di elementi e distribuisce gli elementi nell'ordine del processo di classificazione.

the illustration,