Page 170 - 4868
P. 170

Ошибка! Стиль не определен.                                                              168


                                                  y    n 1 x  , 0   j n ,
                                                   i     i 0  ij
               де    –  операція,  що  задається  при  виклику  функції  MPI_Reduce  (для
               пояснення  на  рисунку2.3  показаний  приклад  виконання  функції  редукції
               даних).

















                   Рисунок 2.3 – Приклад виконання операції редукції при підсумовуванні
                  даних, що пересилаються, для трьох процесів (у кожному повідомленні 4
                          елементи, повідомлення збираються на процесі з рангом 2)

                     Слід зазначити, що:
                       функція  MPI_Reduce  визначає  колективну  операцію,  і,  тим  самим,
               виклик  функції  має  бути  виконаний  усіма  процесами  вказуваного
               комунікатора.  При  цьому  усі  виклики  функції  повинні  містити  однакові
               значення параметрів count, type, op, root, comm;
                       передача повідомлень має бути виконана усіма процесами, результат
               операції буде отриманий тільки процесом з рангом root;
                       виконання операції редукції здійснюється над окремими елементами
               передаваних повідомлень. Так, наприклад, якщо повідомлення містять по два
               елементи  даних  і  виконується  операція  підсумовування  MPI_SUM,  то
               результат також складатиметься з двох значень, перше з яких міститиме суму
               перших  елементів  усіх  відправлених  повідомлень,  а  друге  значення
               дорівнюватиме сумі других елементів повідомлень відповідно;
                     Застосуємо отримані знання для переробки раніше розглянутої програми
               підсумовування: як можна побачити, увесь програмний код, може бути тепер
               замінений на виклик однієї лише функції MPI_Reduce:

                     // збирання часткових сум на процесі з рангом 0
                     MPI_Reduce(&ProcSum, &TotalSum, 1, MPI_DOUBLE, MPI_SUM, 0,
                           MPI_COMM_WORLD);

                     22.3. Синхронізація обчислень

                     У ряді ситуацій незалежно виконувані в процесах обчислення необхідно
               синхронізувати. Так, наприклад, для виміру часу початку роботи паралельної
               програми  необхідно,  щоб  для  усіх  процесів  одночасно  були  завершені  усі
               підготовчі  дії,  перед  закінченням  роботи  програми  усі  процеси  повинні
               завершити свої обчислення і тому подібне.
                     Синхронізація процесів, тобто одночасне досягнення процесами тих або
   165   166   167   168   169   170   171   172   173   174   175