Page 42 - 6601
P. 42
- root – ранг процесу, що виконує збір даних;
- comm - коммуникатор, в рамках якого виконується
передача даних.
процеси процеси
а) до виконання б)після виконання
Рис.5.2 Демонстрація роботи функції MPI_Gather.
При виконанні функції 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),
де параметри аналогічні, як і в попередній функції.
40