Page 217 - 6571
P. 217
Слід зазначити, що:
- функція MPI_Reduce визначає колективну операцію, і, тим
самим, виклик функції має бути виконаний усіма процесами вка-
зуваного комунікатора. При цьому усі виклики функції повинні
містити однакові значення параметрів count, type, op, root,
comm;
- передача повідомлень має бути виконана усіма процесами,
результат операції буде отриманий тільки процесом з рангом r
ot;
- виконання операції редукції здійснюється над окремими
елементами переданих повідомлень. Так, наприклад, якщо пові-
домлення містять по два елементи даних і виконується операція
підсумовування MPI_SUM, то результат також складатиметься з
двох значень, перше з яких міститиме суму перших елементів
усіх відправлених повідомлень, а друге значення дорівнюватиме
сумі других елементів повідомлень відповідно;
Застосуємо отримані знання для переробки раніше розгляну-
тої програми підсумовування: як можна побачити, увесь програ-
мний код, може бути тепер замінений на виклик однієї лише фу-
нкції MPI_Reduce:
// збирання часткових сум на процесі з рангом 0
MPI_Reduce(&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, 0,
MPI_COMM_WORLD);
22.3 Синхронізація обчислень
У ряді ситуацій незалежно виконувані в процесах обчислення
необхідно синхронізувати. Так, наприклад, для виміру часу поча-
тку роботи паралельної програми необхідно, щоб для усіх проце-
сів одночасно були завершені усі підготовчі дії, перед закінчен-
ням роботи програми усі процеси повинні завершити свої обчис-
лення і тому подібне.
Синхронізація процесів, тобто одночасне досягнення проце-
сами тих або інших точок процесу обчислень, забезпечується за
допомогою функції MPI:
int MPI_Barrier(MPI_Comm comm)
де comm – комунікатор, у рамках якого виконується операція.
216