Page 211 - 6571
P. 211
що дозволяє визначити час в секундах між двома послідовними
показниками часу апаратного таймера використовуваної
комп’ютерної системи.
22.2 Колективні операції передачі даних у MPI
Функції MPI_Send і MPI_Recv, забезпечують можливість
виконання парних операцій передачі даних між двома процесами
паралельної програми. Для виконання комунікаційних колектив-
них операцій, в яких беруть участь усі процеси комунікатора, в
MPI передбачений спеціальний набір функцій. У цьому підрозді-
лі будуть розглянуті три такі функції, широко вживані навіть при
розробці порівняно простих паралельних програм.
Для демонстрації застосування даних MPI-функцій викорис-
таємо навчальну задачу підсумовування елементів вектора x:
n
S = ∑ x
i
i= 1
Розробка паралельного алгоритму для вирішення даної задачі
не викликає важкості: необхідно розділити дані на рівні блоки,
передати ці блоки процесам, виконати в процесах підсумовуван-
ня отриманих даних, зібрати значення вичислених власних сум на
одному з процесів і скласти значення власних сум для отримання
загального результату вирішуваної задачі. При подальшій розро-
бці демонстраційних програм цей алгоритм буде дещо спроще-
ний: процесам програми передаватиметься увесь підсумовуваний
вектор, а не окремі блоки цього вектору.
Передача даних від одного процесу усім процесам програми.
Перше завдання при виконанні розглянутого паралельного алго-
ритму підсумовування полягає в необхідності передачі значень
вектору x усім процесам паралельної програми. Звичайно, для
вирішення цього завдання можна скористатися розглянутими ра-
ніше функціями парних операцій передачі даних :
MPI_Comm_size(MPI_COMM_WORLD, &ProcNum);
for (int i = 1; i < ProcNum; i++)
MPI_Send(&x, n, MPI_DOUBLE, i, 0, MPI_COMM_WORLD);
Проте, таке рішення буде вкрай неефективним, оскільки по-
вторення операцій передачі призводить до підсумовування витрат
210