Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование.

Презентация:



Advertisements
Похожие презентации
Введение в параллельные вычисления. Технология программирования MPI (день шестой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Advertisements

Основы параллельного программирования с использованием MPI Лекция 6 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
Кафедра ЮНЕСКО по НИТ1 Производные типы данных Параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции параллельное программирование.
Кафедра ЮНЕСКО по НИТ1 Передача упакованных данных Параллельное программирование.
Лекция 6 Множественное распараллеливание на Linux кластере с помощью библиотеки MPI 1. Компиляция и запуск программы на кластере. 2. SIMD модель параллельного.
Кафедра ЮНЕСКО по НИТ1 Коммуникационные операции «точка-точка» параллельное программирование.
Введение в параллельные вычисления. Технология программирования MPI (день второй) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Кафедра ЮНЕСКО по НИТ1 Коллективные коммуникационные операции. Редукционные операции параллельное программирование Часть2.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 7 Томский политехнический университет.
Параллельное программирование с использованием технологии MPI Аксёнов Сергей Владимирович к.т.н., доцент каф.ОСУ ТПУ Лекция 8 Томский политехнический университет.
КОЛЛЕКТИВНЫЕ ВЗАИМОДЕЙСТВИЯ ПРОЦЕССОВ Барьерная синхронизация всех процессов группы. Широковещательная передача (broadcast) от одного процесса всем остальным.
Гергель В.П. Общий курс Теория и практика параллельных вычислений Лекция 8 Методы разработки параллельных программ при использования интерфейса передачи.
Основы параллельного программирования с использованием MPI Лекция 5 Немнюгин Сергей Андреевич Санкт-Петербургский государственный университет физический.
САОД кафедра ОСУ 1 Основные абстрактные типы данных Схема процесса создания программ для решения прикладных задач ВУ.
Введение в параллельные вычисления. Технология программирования MPI (день третий) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Лекция 1 Основные понятия ст.преп Касекеева А.Б..
Введение в параллельные вычисления. Технология программирования MPI (день седьмой) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Введение в параллельные вычисления. Технология программирования MPI (день четвертый) Антонов Александр Сергеевич, к.ф.-м.н., н.с. лаборатории Параллельных.
Распределение памяти. Динамическое выделение памяти.
Транксрипт:

Кафедра ЮНЕСКО по НИТ1 Создание групп и коммуникаторов Параллельное программирование

Кафедра ЮНЕСКО по НИТ 2 Группы Группа представляет собой упорядоченное множество процессов. Каждый процесс идентифицируется переменной целого типа. Идентификаторы процессов образуют непрерывный ряд, начинающийся с нуля. В MPI вводится специальный тип данных MPI_Group и набор функций для работы с переменными и константами этого типа. Существует две предопределенных группы: MPI_GROUP_EMPTY- группа, не содержащая ни одного процесса; MPI_GROUP_NULL - возвращаемое значение функций, когда группа не может быть создана. Созданная группа не может быть модифицирована - расширена или усечена, может быть только создана новая группа. Интересно отметить, что при инициализации MPI не создается группы, соответствующей коммуникатору MPI_COMM_WORLD. Она должна создаваться специальной функцией явным образом.

Кафедра ЮНЕСКО по НИТ 3 Функция MPI_Comm_group comm коммуникатор области связи int MPI_Comm_group (MPI_Comm comm, MPI_Group *group) Входные параметры: Выходные параметры: group созданная группа создает группу group для множества процессов, входящих в область связи коммуникатора comm.

Кафедра ЮНЕСКО по НИТ 4 Функция MPI_Group_incl oldgroup существующая группа, на основе которой создается новая n количество процессов в новой группе ranks ранги процессов, вошедших в эту группу int MPI_Group_incl (MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) Входные параметры: Выходные параметры: newgroup созданная группа создает новую группу newgroup из n процессов, входящих в группу oldgroup. Ранги этих процессов содержатся в массиве ranks

Кафедра ЮНЕСКО по НИТ 5 Функция MPI_Group_incl int MPI_Group_incl (MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) создает новую группу newgroup из n процессов, входящих в группу oldgroup. Ранги этих процессов содержатся в массиве ranks В НОВУЮ группу войдут процессы с рангами ranks[0],..., ranks[n-1], причем рангу i в новой группе соответствует ранг ranks(i) в старой группе. При n = 0 создается пустая группа MPI_GROUP_EMPTY. С помощью данной функции можно не только создать новую группу, но и изменить порядок процессов в старой группе.

Кафедра ЮНЕСКО по НИТ 6 Функция MPI_Group_excl oldgroup существующая группа, на основе которой создается новая n количество удаляемых из группы процессов ranks ранги процессов, которые не войдут в группу int MPI_Group_excl (MPI_Group oldgroup, int n, int *ranks, MPI_Group *newgroup) Входные параметры: Выходные параметры: newgroup созданная группа создает группу newgroup, исключая из исходной группы (oldgroup) процессы с рангами ranks[0],..., ranks[n-1]

Кафедра ЮНЕСКО по НИТ 7 Функция MPI_Group_union group1 первая группа group2 вторая группа int MPI_Group_union (MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) Входные параметры: Выходные параметры: newgroup созданная группа формирует новую группу из всех элементов 1-й и 2-й групп (объединение множеств)

Кафедра ЮНЕСКО по НИТ 8 Функция MPI_Group_intersection group1 первая группа group2 вторая группа int MPI_Group_intersection (MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) Входные параметры: Выходные параметры: newgroup созданная группа новая группа формируется из элементов 1-й группы, которые входят также и во 2-ю. Упорядочивание, как в 1-й группе (пересечение множеств)

Кафедра ЮНЕСКО по НИТ 9 Функция MPI_Group_difference group1 первая группа group2 вторая группа int MPI_Group_difference (MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) Входные параметры: Выходные параметры: newgroup созданная группа формирует новую группу из всех элементов 1-й группы, которые не входят во 2-ю. Упорядочивание, как в 1-й группе (дополнение множеств)

Кафедра ЮНЕСКО по НИТ 10 Функция MPI_Group_size group группа int MPI_Group_size (MPI_Group group, int *size) Входные параметры: Выходные параметры: size количество процессов определяет количество (size) процессов в группе group

Кафедра ЮНЕСКО по НИТ 11 Функция MPI_Group_rank group группа int MPI_Group_rank (MPI_Group group, int *rank) Входные параметры: Выходные параметры: rank ранг процесса в данной группе (или MPI_UNDEFINED) возвращает ранг (rank) процесса в группе group Если процесс не входит в указанную группу, вторым аргументом возвращается значение MPI_UNDEFINED

MPI_Group_translate_ranks - Кафедра ЮНЕСКО по НИТ 12 Функция установки соответствия между номерами процессов в двух группах. int MPI_Group_rank (MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2) group1 группа1 n число процессов, для которых устанавливается соответствие ranks1 Массив номеров процессов из первой группы group2 группа2 Входные параметры: Выходные параметры: ranks2 номера тех же процессов во второй группе

Кафедра ЮНЕСКО по НИТ 13 Функция MPI_Group_free group уничтожаемая группа int MPI_Group_free (MPI_Group *group) Входные параметры: Выходные параметры: group указатель на пустую группу MPI_GROUP_NULL уничтожает группу group

Кафедра ЮНЕСКО по НИТ 14 Коммуникаторы Коммуникатор представляет собой скрытый объект с некоторым набором атрибутов, а также правилами его создания, использования и уничтожения. Коммуникатор описывает некоторую область связи. Одной и той же области связи может соответствовать несколько коммуникаторов, но даже в этом случае они не являются тождественными и не могут участвовать во взаимном обмене сообщениями. Если данные посылаются через один коммуникатор, процесс-получатель может получить их только через тот же самый коммуникатор. При инициализации MPI создается два предопределенных коммуникатора: MPI_COMM_WORLD – описывает область связи, содержащую все процессы; MPI_COMM_SELF – описывает область связи, состоящую из одного процесса.

Кафедра ЮНЕСКО по НИТ 15 Функция MPI_Comm_create int MPI_Comm_create (MPI_Comm comm, MPI_Group group, MPI_Comm *newcomm) Входные параметры: Выходные параметры: newcomm новый коммуникатор создает новый коммуникатор из группы group comm родительский коммуникатор group группа, для которой создается коммуникатор

Функция MPI_Comm_dup Кафедра ЮНЕСКО по НИТ 16 Функция дублирования коммуникатора int MPI_Comm_dup (MPI_Comm comm, MPI_Comm *newcomm) Входные параметры: Выходные параметры: newcomm новый коммуникатор comm родительский коммуникатор

Кафедра ЮНЕСКО по НИТ 17 Функция MPI_Comm_split int MPI_Comm_split (MPI_Comm comm, int color, int key, MPI_Comm *newcomm) Входные параметры: Выходные параметры: newcomm новый коммуникатор расщепляет группу, связанную с родительским коммуникатором, на непересекающиеся подгруппы comm родительский коммуникатор color признак подгруппы key управление упорядочиванием

Кафедра ЮНЕСКО по НИТ 18 Функция MPI_Comm_split int MPI_Comm_split (MPI_Comm comm, int color, int key, MPI_Comm *newcomm) Функция расщепляет группу, связанную с родительским коммуникатором, на непересекающиеся подгруппы по одной на каждое значение признака подгруппы color. Значение color должно быть неотрицательным. Каждая подгруппа содержит процессы с одним и тем же значением color. Параметр key управляет упорядочиванием внутри новых групп: меньшему значению key соответствует меньшее значение идентификатора процесса. В случае равенства параметра key для нескольких процессов упорядочивание выполняется в соответствии с порядком в родительской группе.

Кафедра ЮНЕСКО по НИТ 19 Функция MPI_Comm_split Алгоритм расщепления группы из восьми процессов на три подгруппы: MPI_comm comm, newcomm; int myid, color; …… MPI_Comm_rank(comm, &myid); color = myid%3; MPI_Comm_split(comm, color, myid, &newcomm); В данном примере первую подгруппу образовали процессы, номера которых делятся на 3 без остатка, вторую, для которых остаток равен 1, и третью, для которых остаток равен 2. Отметим, что после выполнения функции MPI_Comm_split значения коммуникатора newcomm в процессах разных подгрупп будут отличаться.

Кафедра ЮНЕСКО по НИТ 20 Функция MPI_Comm_free comm уничтожаемый коммуникатор int MPI_Comm_free (MPI_Comm *comm) Входные параметры: уничтожает коммуникатор comm

Кафедра ЮНЕСКО по НИТ 21 Задание 1 На основе коммуникатора MPI_Comm_world создать группу Разбить её на 2 непересекающиеся группы с помощью функций MPI_Group_incl и MPI_Group_excl. На основе этих групп создать свои коммуникаторы С помощью функции MPI_Bcast в пределах каждой группы 0-й процесс данной группы рассылает какое-нибудь свое число. Для обоих групп вывести результат пересылок на экран.

Задание 2 Для n процессов (n – произвольно) при помощи MPI_Comm_split создайте два коммуникатора: отдельно из процессов с четными и нечетными номерами. Осуществите передачу данных по кольцу внутри каждого коммуникатора. 22