Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ПРО(теорія).doc
Скачиваний:
3
Добавлен:
20.09.2019
Размер:
461.31 Кб
Скачать

Процеси процеси

а) до виконання б)після виконання

Рис.6.1 Демонстрація роботи функції MPI_Scatter.

При виклику цієї функції процес з номером root проведе передачу даних всім іншим процесам в комунікаторі. Кожному процесу буде відправлено scount елементів. Процес з номером 0 отримає блок даних із sbuf з елементів із індексами від 0 до scount-1, процесу з номером 1 буде відправлений блок з елементів із індексами від scount до 2* scount-1 і т.д. Тим самим, загальний розмір повідомлення, що відправляється, повинен бути рівний scount * p елементів, де p є кількість процесів в комунікаторі comm.

Екзаменаційний білет №17

  1. Топології паралельних та розподілених комп’ютерних систем.

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

У MPI підтримуються два види топологій - прямокутні решітки довільної розмірності (декартова топологія) і топологія графа будь-якого довільного вигляду.

Над топологіями можна виконувати різні операції. Декартові решітки можна розділяти на гіперплошщини, виділяючи деякі виміри. Дані можна зсувати вздовж вибраного виміру декартової решітки. Зсувом називають пересилку даних між процесами уздовж певного виміру. Уздовж вибраного виміру можуть бути організовані колективні обміни

  1. Додаткові операції редукції даних.

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

int MPI_Allreduce(void sendbuf , void *recvbuf , int count ,

MPI_Datatype type , MPI_Op op , MPI_Comm comm ) ,

де

- sendbuf - буфер пам’яті з повідомленням, що відправляється;

- recvbuf - буфер пам’яті для результуючого повідомлення;

- count - кількість елементів в повідомленні;

- type - тип елементів повідомлень;

- op - операція, яка повинна бути виконана над даними;

- comm - комунікатор, в рамках якого виконується операція ) ,

Функція MPI_Allreduce виконує розсилку між процесами всіх результатів операції редукції. Можливість управління розподілом цих даних між процесами надається функцією MPI_Allreduce_scatter. Ще один варіант операції збору і обробки даних, коли забезпечується отримання всіх часткових результатів редукування, може бути реалізований з використанням функції:

int MPI_Scan(void *sendbuf , void *recvbuf , int count ,

MPI_Datatype type , MPI_Op op , MPI_Comm comm ) .

де

- sendbuf - буфер пам’яті з повідомлення, що відправляється;

- recvbuf - буфер пам’яті для результуючого повідомлення;

-count - кількість елементів в повідомленні;

- type - тип елементів повідомлення;

- op - операція, яка повинна бути виконана над даними;

- comm - комунікатор, в рамках якого виконується операція.

Загальна схема виконання функції MPI_Scan показана на рис. 3.7.

процеси процеси

а)до початку операції б) після завершення операції

Рис. 3.7. Загальна схема операції редукції з отриманням часткових результатів обробки даних

Елементи отриманих повідомлень представляють собою результати обробки відповідних елементів повідомлень, що передаються процесами. Для отримання результатів на процесі з рангом використовуються дані від процесів, ранг яких менший чи рівний , тобто

де - операція, що задається при виклику функції MPI_Scan.

Використання викладеного вище матеріалу стосовно колективних операцій буде розглянуто далі.