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)?