Page 164 - 4868
P. 164

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

               ділянка  з  функцією  передачі  MPI_Send  виконується  усіма  процесами,  за
               винятком нульового процесу.
                     Для     розділення       фрагментів        коду     між     процесами        зазвичай
               використовується підхід, застосований в тільки що розглянутій програмі – за
               допомогою  функції  MPI_Comm_rank  визначається  ранг  процесу,  а  потім

               відповідно до рангу виділяються необхідні для процесу ділянки програмного
               коду.  Наявність  в одній  і тій же  програмі фрагментів  коду різних процесів
               також значно ускладнює розуміння і, в цілому, розробку MPI-програми. Як
               результат,  можна  рекомендувати  при  збільшенні  об’єму  програм,  що
               розробляються, виносити програмний код різних процесів в окремі програмні
               модулі  (функції).  Загальна  схема  MPI-програми  в  цьому  випадку  матиме
               вигляд:
                     MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
                     if (ProcRank == 0) DoProcess0();
                     else if (ProcRank == 1) DoProcess1();
                     else if (ProcRank == 2) DoProcess2();

                     У  багатьох  випадках,  як  і  в  розглянутому  прикладі,  виконувані  дії  є
               такими, що відрізняються тільки для процесу з рангом 0. В цьому  випадку
               загальна схема MPI-програми набуває простішого вигляду:
                     MPI_Comm_rank(MPI_COMM_WORLD, &ProcRank);
                     if (ProcRank == 0) DoManagerProcess();
                     else DoWorkerProcesses();

                     На  завершення  обговорення  прикладу  пояснимо  застосований  в  MPI
               підхід  для  контролю  правильності  виконання  функцій.  Усі  функції  MPI
               (окрім  MPI_Wtime  і  MPI_Wtick)  повертають  в  якості  свого  значення  код
               завершення.  При  успішному  виконанні  функції  повернений  код  рівний
               MPI_SUCCESS.  Інші  значення  коду  завершення  свідчать  про  виявлення  тих
               або  інших  помилкових  ситуацій  в  ході  виконання  функцій.  Для  з’ясування
               типу виявленої помилки використовуються іменовані константи, серед яких:
                       MPI_ERR_BUFFER – неправильний вказівник на буфер;
                       MPI_ERR_TRUNCATE – повідомлення перевищує розмір приймального
               буфера;
                       MPI_ERR_COMM – неправильний комунікатор;
                       MPI_ERR_RANK – неправильний ранг процесу та ін.
                     Повний  список  констант  для  перевірки  коду  завершення  міститься  у
               файлі  mpi.h.  Проте,  за  замовчуванням,  виникнення  будь-якої  помилки  під
               час виконання функції MPI призводить до негайного завершення паралельної
               програми.  Для  того,  щоб  мати  можливість  проаналізувати  повертаний  код
               завершення,  необхідно  скористатися  MPI  функціями,  що  надаються  для
               створення обробників помилок і керування ними.


                     Запитання для самоперевірки

                     1. Яке функціональне призначення інтерфейсу передачі даних (MPI)?
   159   160   161   162   163   164   165   166   167   168   169