Справочник от Автор24
Поделись лекцией за скидку на Автор24

Группы процессов и области связи в MPI-программе

  • 👀 334 просмотра
  • 📌 303 загрузки
Выбери формат для чтения
Загружаем конспект в формате pdf
Это займет всего пару минут! А пока ты можешь прочитать работу в формате Word 👇
Конспект лекции по дисциплине «Группы процессов и области связи в MPI-программе» pdf
РАСПРЕДЕЛЕННЫЕ ВЫЧИСЛЕНИЯ ЛЕКЦИЯ 9 ГРУППЫ ПРОЦЕССОВ И ОБЛАСТИ СВЯЗИ В MPI-ПРОГРАММЕ Когда разрабатывается большая и сложная программа со множеством процессов распределённых не только по вычислителям, но и географически; когда над программой работает несколько программистов; или когда в программе используются библиотеки или программные компоненты разрабатываемые отдельно, то появляется опасность запутаться в распределении действий между множественными процесса, а также запутаться (как в нитках) в передачах данных между процессами и внести в программу фатальные изъяны. Избежать обозначенных ранее проблем можно путём формирования групп процессов для решения тех или иных частей задачи, а также распределения передач по разным областям связи. В MPI для создания и использования групп и областей связи имеются специальные средства. Итак, цели разделения процессов на группы, и введения дополнительных областей связи: 1. Структурирование и ранжирование процедур передачи данных; 2. Устранение ошибок при планировании передач; 3. Предоставление возможности создания библиотечных параллельных компонентов программ с независимыми от основной программы передачами; 4. Создание одной программы несколькими программистами; 5. Учёт структуры программы при планировании операций и передач данных; 6. Учёт топологии вычислительной системы при планировании операций и передач данных. Изначально, все процессы MPI-программы объединены в одну группу, для которой создана область связи MPI_COMM_WORLD. В ходе выполнения программы возможно создавать новые группы, их объединять, разделять, удалять и прочее. Для взаимодействия процессов друг с другом (в частности, для передачи данных) в рамках каждой группы создаётся область связи называемая интракоммуникатором. Группы процессов могут пересекаться друг с другом. Одновременно, каждый процесс может входить в несколько групп. В каждой группе и в каж1 дой области связи, в которые входит процесс, у него имеется собственный идентификатор (номер). Узнать свой номер в группе процесс может с помощью функции MPI_Group_rank, а номер в области связи процесс может узнать с помощью функции MPI_Comm_rank. На рис. 1 показан пример. Для взаимодействия все девять процессов изначально были объединены общей областью связи MPI_COMM_WORLD и каждый процесс получил в ней свой номер (от 0, до 8). Потом была создана область связи COMM1 объединяющая те же девять процессов, но в ней они пронумерованы в обратном порядке. Также были созданы области связи COMM2 и COMM3. В них входят разные процессы. Один из процессов входит во все четыре области связи и имеет в каждой из них свой номер. MPI_COMM_WORLD 5 4 1 1 7 7 1 2 COMM3 4 5 0 8 2 63 30 8 0 3 COMM2 3 6 1 2 6 COMM1 Рис. 1. Процессы и области связи Создание групп процессов и областей связи для них ещё полезно тем, что функции коллективных передач действуют в рамках одной из областей связи. То есть, если есть необходимость, чтобы в коллективных операциях, например с использованием функций MPI_Barrier, MPI_Bcast, MPI_Scatter и пр, участвовали не все процессы программы, а только их часть, то эти выбранные процессы можно выделить в отдельную группу и только в рамках этой группы выполнять коллективное взаимодействие. 2 Кроме областей связи для групп процессов, можно создавать области связи для взаимодействия лидеров разных групп. Они называются интеркоммуникаторами. Группы процессов Идентификатор группы имеет тип MPI_Group. С группами процессов можно выполнять следующие операции: 1. Создание групп; 2. Получение информации о группе; 3. Объединение групп; 4. Пересечение групп; 5. Разность групп; 6. Создание области связи на основе группы; 7. Удаление группы. Функции создания и получения информации о группе: 1. Доступ к группе связанной с областью связи («создание группы») int MPI_Comm_group(MPI_Comm comm, MPI_Group *group) comm – идентификатор области связи group – идентификатор группы связанной с областью связи comm 2. Получение текущего числа процессов в группе int MPI_Group_size(MPI_Group group, int *size) 3. Получение номера процесса в группе int MPI_Group_rank(MPI_Group group, int *rank) 4. Относительная нумерация процессов в двух разных группах int MPI_Group_translate_rank( MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2) 5. Сравнение групп на совпадение наборов процессов int MPI_Group_compare(MPI_Group group1, MPI_Group group2, int *result) result – результат сравнения (константа равенства MPI_SIMILAR, константа неравенства MPI_UNEQUAL) Создание, объединение, пересечение и разность групп 1. Создание новой группы процессов из n процессов имеющийся группы int MPI_Group_incl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) 2. Объединение двух групп group1 и group2 процессов int MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) 3. Исключение процессов из группы oldroup 3 int MPI_Group_excl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) 4. Создание новой группы из разности двух старых int MPI_Group_difference(MPI_Group group1,MPI_Group group2, MPI_Group *newgroup) 5. Создание новой группы из пересечения двух старых int MPI_Group_intersection(MPI_Group group1,MPI_Group group2, MPI_Group *newgroup) Добавление и удаление процессов, удаление группы 1. Подсоединение n процессов к имеющейся группе int MPI_Group_range_incl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) 2. Исключение n процессов из имеющейся группы int MPI_Group_range_excl(MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) Примечание: Массив ranks в обоих случаях состоит из триплетов вида: [первый1,последний1,шаг1],[первый2,последний2,шаг2] …….. 3. Удаление группы int MPI_Group_free(MPI_Group *group) Подробнее о группах процессов можно почитать здесь (примеры на Фортране): https://parallel.ru/sites/default/files/info/parallel/antonov/groups.pdf и здесь: http://cdot-nntu.ru/basebook/parallelnoe_programmirovanie/files/assets/basichtml/page67.html Области связи Идентификатор группы имеет тип MPI_Comm. Ещё раз отметим, что области связи бывают двух типов 1. Интракоммуникаторы. К этому типу относятся области связи, служащие для передачи данных между процессами одной группы. Передавать данные в рамках интракоммуникатора могут все процессы группы. MPI_COMM_WORLD главный интракоммуникатор. 2. Интеркоммуникаторы. К этому типу относятся области связи, служащие для передачи данных между процессами лидерами разных групп. Передавать данные в рамках интеркоммуникатора могут только лидеры групп. В нашей лекции они рассматриваться не будут. 4 Операции с интракоммуникаторами: 1. Создание; 2. Получение информации о процессах; 3. Тестирование; 4. Разделение; 5. Создание топологий процессов; 6. Удаление. Создание и удаление интракоммуникаторов 1) Дублирование имеющейся области связи int MPI_Comm_dup(MPI_Comm oldcomm, MPI_Comm newcomm) 2) Создание области связи из подмножества процессов group другой области связи int MPI_Comm_create (MPI_Comm oldcomm, MPI_Group group, MPI_Comm newcomm) 3) Удаление области связи int MPI_Comm_free(MPI_Comm comm) Получение информации о процессах в интракоммуникаторах 1) Получение числа процессов в области связи int MPI_Comm_size(MPI_Comm comm, int size) 2) Получение номера процесса в области связи int MPI_Comm_rank(MPI_Comm comm, int rank Создание новых областей связи путём разделения процессов старой int MPI_Comm_split(MPI_Comm oldcomm, int color, int n_rank, MPI_Comm *newcomm ) oldcomm – идентификатор исходной области связи color – признак объединения процессов в новую область связи (процессы, у которых этот параметр совпадает объединяются в одну область) n_rank – параметр, задающий порядок присвоения номеров процессам в новых областях связи (у кого этот параметр больше, тот получит больший номер в новой области связи) newcomm – идентификатор новой области связи Подробнее об применении MPI_Comm_split: https://vunivere.ru/work25974/page109 https://web-answers.ru/c/objasnenie-mpi-comm-split.html http://cdot-nntu.ru/basebook/parallelnoe_programmirovanie/files/assets/basichtml/page70.html Ещё: https://www.intuit.ru/studies/courses/4447/983/lecture/14927?page=7 5
«Группы процессов и области связи в MPI-программе» 👇
Готовые курсовые работы и рефераты
Купить от 250 ₽
Решение задач от ИИ за 2 минуты
Решить задачу
Помощь с рефератом от нейросети
Написать ИИ

Тебе могут подойти лекции

Автор(ы) Лучинин А. С.
Смотреть все 493 лекции
Все самое важное и интересное в Telegram

Все сервисы Справочника в твоем телефоне! Просто напиши Боту, что ты ищешь и он быстро найдет нужную статью, лекцию или пособие для тебя!

Перейти в Telegram Bot