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

15.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.

Пример использования функции MPI_Gather рассматривается в разделе 7 при разработке параллельных программ умножения матрицы на вектор.

  1. Порівняння MPP та кластерів.

Как було зазначено раніше обчислювальний кластер — це сукупність комп'ютерів, об'єднаних у межах деякою мережі на вирішення одного завдання (рис.3), яка для користувача представляється як єдиного ресурсу. Таку концепцію кластера вперше запропонувала і реалізувала на початку 80-х корпорація Digital Equipment, що й по сьогодні розвиває цю технологію Поняття " єдиний ресурс " означає наявність програмного забезпечення, що дає можливість користувачам, адміністраторам і прикладним програмам вважати, що є лише одне сутність, із якою працюють - кластер. Наприклад, система пакетної обробки кластера дозволяє послати завдання на обробку кластеру, а чи не якомусь окремому комп'ютера. Більше складним прикладом є наші системи баз даних.

Високопродуктивні кластеры – це MPP.

Архитектура високопродуктивних кластерів з'явилася як розвиток принципів побудови систем MPP на менш продуктивних й масові компонентах, керованих операційній ситемой загального призначення. Кластери як і MPP системи складаються з слабосвязанных вузлів, які можна як однорідними, і, на відміну MPP, різними чи гетерогенными. Особливу увагу під час проектування високопродуктивної кластерної архутектуры приділяється забезпечення високої ефективності комунікаційної шини, яка зв'язує вузли кластера

  1. Загальна передача даних від всіх процесів всім процесам.

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

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

де:

- sbuf, scount, stype - параметри передаваного повідомлення (scount визначає кількість елементів, що передаються на кожен процес);

- rbuf, rcount, rtype - параметри повідомлення, що приймається в процесах;

- root – номер процесу, що виконує розсилку даних;

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