Page 207 - 6571
P. 207

}

                  Як випливає з тексту програми, кожен процес визначає свій

            ранг, після чого дії в програмі розділяються. Усі процеси, окрім
            процесу з рангом 0, передають значення свого рангу нульовому
            процесу. Процес з рангом 0 спочатку друкує значення свого ран-

            гу, а далі послідовно приймає повідомлення з рангами процесів і
            також друкує їх значення. При цьому важливо відмітити, що по-
            рядок прийому повідомлень заздалегідь не визначений і залежить
            від умов виконання паралельної програми (більше того, цей по-

            рядок може змінюватися від запуску до запуску). Можливий ва-
            ріант результатів друку процесу 0 може мати наступний вигляд
            (для паралельної програми, що складається з чотирьох процесів):

                  Hello from process 0
                  Hello from process 2
                  Hello from process 1
                  Hello from process 3

                  Такий «плаваючий» вид отриманих результатів істотним чи-

            ном ускладнює розробку, тестування і відладку паралельних про-
            грам, оскільки в цьому випадку зникає один з основних принци-
            пів програмування – повторюваність виконуваних обчислюваль-
            них експериментів. Як правило, якщо це не призводить до втрати

            ефективності, слід забезпечувати однозначність розрахунків і при
            використанні паралельних обчислень. Для даного простого прик-
            ладу  можна  відновити  постійність  отримуваних  результатів  за

            допомогою завдання рангу процесу-відправнику в  операції при-
            йому повідомлення:

                  MPI_Recv(&RecvRank, 1, MPI_INT, i, MPI_ANY_TAG,
                      MPI_COMM_WORLD&Status).

                  Вказівка  рангу  процесу-відправника  регламентує  порядок
            прийому          повідомлень,          і,    як     результат,         рядки       друку
            з’являтимуться строго в порядку зростання рангів процесів (така

            регламентація в окремих ситуаціях може призводити до уповіль-
            нення виконуваних паралельних обчислень).
                  В  загальному  випадку  MPI-програма  є  деякою  «макропрог-

            рамою»,  різні  частини  якої  використовуються  різними  процеса-
            ми.  Так,  наприклад,  в  наведеному  прикладі  програми  виділені
            рамкою  ділянки  програмного  коду  не  виконуються  одночасно



                                                        206
   202   203   204   205   206   207   208   209   210   211   212