2015-01-03 17 views
6

Czy ktoś może wyjaśnić, jakie są różnice między MPI_Scatter i MPI_Bcast? (Poza tym, że każdy proces może transmitować przy użyciu MPI_Scatter i tylko root może używać MPI_Bcast)Różnice między MPI_Scatter i MPI_Bcast

W jakich przypadkach powinienem użyć pierwszego nad drugim?

Odpowiedz

11

MPI_Bcast() wysyła ten sam fragment danych do wszystkich, podczas gdy MPI_Scatter() wysyła każdy proces do części tablicy wejściowej. MPI_Bcast() jest przeciwieństwem MPI_Reduce(), a MPI_Scatter() jest przeciwieństwem MPI_Gather(). Mały schemat, taki jak this one, nie wymaga objaśnień.

I zarówno MPI_Scatter(), jak i MPI_Bcast() mają argument o nazwie int root, aby określić proces główny.

+0

Dzięki, bardzo zrozumiałe. –

+6

Podczas gdy 'MPI_SCATTER' jest rzeczywiście przeciwieństwem' MPI_GATHER', nie nazwałbym 'MPI_BCAST' przeciwieństwem' MPI_REDUCE'. –

+2

W prawo, 'MPI_Reduce()' może łączyć dane na wiele różnych [sposobów] (http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node78.html), takie jak 'MPI_SUM' lub' MPI_MAX' i 'MPI_Bcast()' dostarcza ten sam fragment danych do każdego procesu, bez żadnych operacji po drodze. – francis

1

MPI_Bcast pobiera pojedynczy element danych w procesie root (czerwone pole) i kopiuje go do wszystkich innych procesów. MPI_Scatter pobiera tablicę elementów i rozdziela elementy w kolejności od stopnia procesu.

the illustration,

Powiązane problemy