
- •Порівняння кластерів та smp-систем.
- •Режими передачі даних.
- •Системи зі змінним часом звертання до пам’яті.(numa)
- •2. Організація неблокуючих обмінів даними між процесорами.
- •1. Структура cc-numa-систем
- •2. Одночасне виконання передачі і прийому
- •1. Види, переваги та недоліки numa-систем
- •2. Узагальнена передача даних від одного процесу всім процесам.
- •2. Узагальнена передача даних від всіх процесів одному процесу
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.