Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab3.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
186.37 Кб
Скачать

Лабораторна робота № 3

Тема: Дослідження механізмів колективної взаємодії. Реалізація механізмів блокувань та бар’єрів між паралельними процесами.

Мета: дослідити механізми колективної взаємодії між паралельними обчислювальними процесами у середовищі МРІ, навчитися програмувати паралельні задачі з використанням механізмів блокувань та бар’єрів між паралельними процесами.

ЗМІСТ

  1. Теоретичні відомості

  2. Хід роботи

  3. Зміст звіту

  4. Контрольні запитання

  5. Список літератури

1. Теоретичні відомості

1.1 Колективні взаємодії процесів

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

int MPI_Bcast(void *buf, int count, MPI_Datatype datatype, int source, MPI_Comm comm)

  • OUT buf - адреса початку буфера посилки повідомлення

  • count - число переданих елементів у повідомленні

  • datatype - тип переданих елементів

  • source - номер процесу, що розсилає

  • comm - ідентифікатор групи

Розсилання повідомлення від процесу source всім процесам, включаючи процес, що розсилає. При поверненні із процедури вміст буфера buf процесу source буде скопійовано в локальний буфер процесу. Значення параметрів count, datatype і source повинні бути однаковими у всіх процесів.

int MPI_Gather( void *sbuf, int scount, MPI_Datatype stype, void *rbuf, int rcount, MPI_Datatype rtype, int dest, MPI_Comm comm)

  • sbuf - адреса початку буфера посилки

  • scount - число елементів що посилаються

  • stype - тип елементів повідомлення, що відсилає

  • OUT rbuf - адреса початку буфера збору даних

  • rcount - число елементів у прийнятому повідомленні

  • rtype - тип елементів прийнятого повідомлення

  • dest - номер процесу, на якому відбувається збір даних

  • comm - ідентифікатор групи

  • OUT ierror - код помилки

Збір даних із всіх процесів у буфері rbuf процесу dest. Кожний процес, включаючи dest, посилає вміст свого буфера sbuf процесу dest. Збираючий процес зберігає дані в буфері rbuf, розташовуючи їх у порядку зростання номерів процесів. Параметр rbuf має значення тільки на процесі, що збирає, і на інших ігнорується, значення параметрів count, datatype і dest повинні бути однаковими у всіх процесів.

MPI_Scatter – аналогічна функція, що розсилає дані з буферу rbuf процесу dest усім іншим процесам.

int MPI_Allreduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, MPI_Comm comm)

  • sbuf - адреса початку буфера для аргументів

  • OUT rbuf - адреса початку буфера для результату

  • count - число аргументів у кожного процесу

  • datatype - тип аргументів

  • op - ідентифікатор глобальної операції

  • comm - ідентифікатор групи

Виконання count глобальних операцій op з поверненням count результатів у всіх процесах у буфері rbuf. Операція виконується незалежно над відповідними аргументами всіх процесів. Значення параметрів count і datatype у всіх процесів повинні бути однаковими. З міркувань ефективності реалізації передбачається, що операція op має властивості асоціативності й комунікативності.

int MPI_Reduce( void *sbuf, void *rbuf, int count, MPI_Datatype datatype, MPI_Op op, int root, MPI_Comm comm)

  • sbuf - адреса початку буфера для аргументів

  • OUT rbuf - адреса початку буфера для результату

  • count - число аргументів у кожного процесу

  • datatype - тип аргументів

  • op - ідентифікатор глобальної операції

  • root - процес-одержувач результату

  • comm - ідентифікатор групи

Функція аналогічна попередній, але результат буде записаний у буфер rbuf тільки в процесу root.

Колективні операції MPI_Op:

MPI_SUM – сума

MPI_MIN – мінімальне

MPI_MAX – максимальне

MPI_PROD – добуток

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]