Page 167 - 4868
P. 167
165 Ошибка! Стиль не определен.
де
buf, count, type – буфер пам’яті з повідомленням (для процесу з
рангом 0), що відправляється, і для прийому повідомлень (для усіх інших
процесів );
root – ранг процесу, що виконує розсилку даних;
comm – комунікатор, у рамках якого виконується передача даних.
Функція MPI_Bcast здійснює розсилку даних з буфера buf, що містить
count елементів типу type, з процесу, що має номер root, усім процесам,
що входять до комунікатора comm (рис. 2.2).
Рисунок2.2 – Загальна схема операції передачі даних від одного процесу усім
іншим процесам
Слід зазначити, що:
функція MPI_Bcast визначає колективну операцію, і, тим самим, при
виконанні необхідних розсилок даних виклик функції MPI_Bcast має бути
здійснений усіма процесами вказуваного комунікатора;
вказуваний у функції MPI_Bcast буфер пам’яті має різне призначення
у різних процесів: для процесу з рангом root, яким здійснюється розсилка
даних, в цьому буфері повинне знаходитися повідомлення, що розсилається,
а для усіх інших процесів вказуваний буфер є призначений для прийому
даних, що передаються;
усі колективні операції «несумісні» з парними операціями – так,
наприклад, прийняти широкомовне повідомлення, відіслане за допомогою
MPI_Bcast, функцією MPI_Recv не можна, для цього можна задіяти тільки
MPI_Bcast.
Приведемо програму для вирішення навчального завдання
підсумовування елементів вектору з використанням розглянутої функції
(лістинг 2.8).
Лістинг 2.8– Паралельна програма підсумовування числових значень
#include <math.h>
#include <stdio.h>
#include <stdlib.h>