Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BILET11-15.doc
Скачиваний:
1
Добавлен:
21.09.2019
Размер:
166.91 Кб
Скачать

2. Узагальнена передача даних від всіх процесів одному процесу

Операція узагальненої передачі даних від всіх процесорів одному процесу (збір даних) є зворотною до процедури розподілу даних (див. рис. 4.5). Для виконання цієї операції в MPI призначена функція:

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

- sbuf, scount, stype – параметри переданого повідомлення,

- rbuf, rcount, rtype – параметри прийнятого повідомлення,

- root – ранг процесу, що виконує збір даних,

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

При виконанні функції MPI_Gather кожен процес в комунікаторі передає дані з буфера sbuf на процес з рангом root. Процес з рангом root збирає всі отримувані дані в буфері rbuf (розміщення даних в буфері здійснюється відповідно до рангів процесів-відправників повідомлень). Для того, щоб розмістити всі дані, що надходять, розмір буфера rbuf повинен бути рівний scount * p елементів, де p є кількість процесів в комунікаторі comm. Функція MPI_Gather також визначає колективну операцію, і її виклик при виконанні збору даних повинен бути забезпечений у кожному процесі комунікатора. Слід зазначити, що при використанні функції MPI_Gather збірка даних здійснюється тільки на одному процесі. Для отримання всіх зібраних даних на кожному з процесів комунікатора необхідно використовувати функцію збору і розсилки:

int MPI_Allgather(void *sbuf, int scount, MPI_Datatype stype,

void *rbuf, int rcount, MPI_Datatype rtype, MPI_Comm comm).

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

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