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
   212   213   214   215   216   217   218   219   220   221   222