int MPI_Bcast(void *buf, int count, MPI_Datatype type, int root, MPI_Comm comm), где
• buf, count, type — буфер памяти с отправляемым сообщением (для
процесса с рангом 0) и для приема сообщений (для всех остальных
процессов);
• root — ранг процесса, выполняющего рассылку данных;
• comm — коммуникатор, в рамках которого выполняется передача
данных.
Функция MPI_Bcast осуществляет рассылку данных из буфера buf,
содержащего count элементов типа type, с процесса, имеющего номер root,
всем процессам, входящим в коммуникатор comm.
Следует отметить:
• функция MPI_Bcast определяет коллективную операцию, и, тем
самым, при выполнении необходимых рассылок данных вызов функции
MPI_Bcast должен быть осуществлен всеми процессами указываемого
коммуникатора;
• указываемый в функции MPI_Bcast буфер памяти имеет различное
назначение у разных процессов: для процесса с рангом root, которым
осуществляется рассылка данных, в этом буфере должно находиться
рассылаемое сообщение, а для всех остальных процессов указываемый
буфер предназначен для приема передаваемых данных;
• все коллективные операции "несовместимы" с парными
операциями — так, например, принять широковещательное сообщение,
отосланное с помощью MPI_Bcast, функцией MPI_Recv нельзя, для этого
можно задействовать только MPI_Bcast.
Рис. 2.1. Общая схема операции передачи данных от одного процесса
всем процессам
23
2.5.3 Передача данных от всех процессов одному. Операции редукции MPI предоставляет обратную по отношению к широковещательной
рассылке операцию - операцию сбора данных или редукцию. Операция
редукции позволяет, собрав на одном из узлов данные, посланные
остальными узлами, выполнить над ними какую-либо из групповых
операций - типа сложения, поиска максимума, минимума, среднего
значения и т.д. [10]