Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Коллективные коммуникации в MPI




 

Основным неудобством при работе с функциями коммуникаций точка-точка является плохая масштабируемость программы, так как приходиться явно задавать ранги процессов и предотвращать возникновение блокировок. При увеличении числа узлов в кластере такие программы становятся слишком запутанными, поэтому в MPI существует набор функций, обеспечивающих обмен сообщениями одновременно между всеми процессами коммуникатора:

· Барьерная синхронизация процессов коммуникатора

 

· Рассылка одних и тех же данных от одного процесса всем (broadcast)

 

· Сбор данных одним процессом от остальных (gather)

 

· Разделение данных одного процесса между всеми процессами (scatter)

 

· Вариация сбора данных, при которой все процессы получают результат (allgather)

 

· Обмен данными "каждый с каждым" (alltoall)

 

· Редукционные операции

 

· Комбинированные операции редукции и разделения

 

· Частичные редукционные операции

 

Барьерная синхронизация процессов коммуникатора int MPI_Barrier(MPI_Comm comm) – после ее вызова вызвавший процесс блокируется до тех пор, пока все процессы коммуникатора не вызовут эту функцию.

int MPI_Bcast(void *buffer, int count, MPI_Datatype datatype, int root,

MPI_Comm comm) – рассылает данные, находящиеся по адресу buffer процесса с рангом root всем процессам коммуникатора comm.

int MPI_Gather (void *sendbuf, int sendcnt, MPI_Datatype sendtype,

void *recvbuf, int recvcount, MPI_Datatype recvtype, int root, MPI_Comm comm)

Данные из буферов sendbuf в количестве sendcount всех процессов в порядке возрастания рангов копируются в буфер recvbuf процесса с рангом root.

int MPI_Scatter(void *sendbuf, int sendcount, MPI_Datatype sendtype,

void *recvbuf, int recvcnt, MPI_Datatype recvtype, int root, MPI_Comm comm) – Функция MPI_Scatter выполняет действия, обратные функциям MPI_Gather, а именно, рассылает данные, находящиеся по адресу sendbuf процесса с рангом root, всем процессам коммуникатора.

int MPI_Allgather (void *sendbuf, int sendcount, MPI_Datatype sendtype,

void *recvbuf, int recvcount, MPI_Datatype recvtype,

MPI_Comm comm) - Отличие этой функции от MPI_Gather в том, что итоговый массив получают все процессы коммуникатора.

int MPI_Alltoall(void *sendbuf, int sendcount, MPI_Datatype sendtype,

void *recvbuf, int recvcount, MPI_Datatype recvtype,

MPI_Comm comm) - все процессы обмениваются данными со всеми.

 

Действия перечисленных функций коллективных коммуникаций показаны на рисунке 2.

 

Иногда бывает необходимо вычислить значение какой-то величины на основании частичных ее значений, вычисленных в нескольких процессах программы. Например, каждый процесс может вычислить частичную сумму, и на основании этих значений необходимо вычислить полную сумму. Или необходимо выбрать минимум из локальных минимумов и т. д.

 

В MPI есть следующие встроенные редукционные операции

· MPI_MAX - максимум

· MPI_MIN - минимум

· MPI_SUM - сумма

· MPI_PROD - произведение

· MPI_LAND - логическое «и»

· MPI_BAND - побитовое «и»

· MPI_LOR - логическое «или»

· MPI_BOR - побитовое «или»

· MPI_LXOR - логическое «исключающее или»

· MPI_BXOR - побитовое «исключающее или»

· MPI_MAXLOC - максимум и его расположение

· MPI_MINLOC - минимум и его расположение

 

int MPI_Reduce(void *sendbuf, void *recvbuf, int count, MPI_Datatype datatype,

MPI_Op op, int root, MPI_Comm comm)

 

 

 

Рис. 2 – функции коллективных коммуникаций в MPI

Параметры:

sendbuf - адрес, по которому находятся отправляемые данные

count - число элементов в sendbuf, к которым требуется применить операцию редукции

datatype - тип данных

op - редукционная операция

root - ранг процесса, который получит итоговое значение (корневого процесса)

comm - коммуникатор

recvbuf - адрес, по которому будет записано итоговое значение (запись произойдет только в процессе с рангом root).

Более подробное описание основных функций MPI находится в приложении А.




Поделиться с друзьями:


Дата добавления: 2014-12-26; Просмотров: 560; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.