2015-01-03 5 views
6

Может кто-нибудь объяснить, в чем разница между MPI_Scatter и MPI_Bcast? (Кроме того, что любой процесс может транслироваться с использованием MPI_Scatter, и только корень может использовать MPI_Bcast)Различия между MPI_Scatter и MPI_Bcast

В каких случаях я должен использовать первый над другим?

ответ

11

MPI_Bcast() отправляет один и тот же фрагмент данных всем, а MPI_Scatter() отправляет каждый процесс в часть входного массива. MPI_Bcast() - противоположность MPI_Reduce(), а MPI_Scatter() - противоположность MPI_Gather(). Небольшая схема, например, this one, не требует пояснений.

И как MPI_Scatter(), так и MPI_Bcast() имеют аргумент с именем int root, чтобы указать корень процесса.

+0

Спасибо, очень понятно. –

+6

Хотя 'MPI_SCATTER' действительно является противоположностью' MPI_GATHER', я бы не назвал 'MPI_BCAST' противоположным' MPI_REDUCE'. –

+2

Правильно, 'MPI_Reduce()' может комбинировать фрагменты данных разными [способами] (http://www.mpi-forum.org/docs/mpi-1.1/mpi-11-html/node78.html), такие как «MPI_SUM» или «MPI_MAX» и «MPI_Bcast()», предоставляют один и тот же фрагмент данных для каждого процесса без каких-либо операций в пути. – francis

1

MPI_Bcast принимает один элемент данных в корневом процессе (красное поле) и копирует его ко всем другим процессам. MPI_Scatter принимает массив элементов и распределяет элементы в порядке ранга процесса.

the illustration,

Смежные вопросы