Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

магПП2013 / lec12ПП

.pptx
Скачиваний:
22
Добавлен:
19.04.2015
Размер:
312.71 Кб
Скачать

11

Выполнение операций передачи данных

Парные операции – только для процессов из одного коммуникатора.

Коллективные операции – одновременно

для всех процессов коммуникатора.

Операции на разных коммуникаторах – независимы и не влияют друг на друга

Создание коммуникаторов

Сужает область действия коллективных операций.

Устраняет взаимовлияние выполняемых частей программы

Лекция 12. И.Г. Захарова, кафедра ПО

12

Управление группами

Группа создается только из уже

существующих групп.

Исходной м.б. группа, связанная с коммуникатором по умолчанию

MPI_COMM_WORLD.

Для каждого процесса определен

коммуникатор MPI_COMM_SELF, включающий этот процесс.

Можно использовать пустую группу

MPI_GROUP_EMPTY

Лекция 12. И.Г. Захарова, кафедра ПО

13

Получение группы, связанной с существующим коммуникатором:

int MPI_Comm_group(MPI_Comm comm, MPI_Group *group)

comm – коммуникатор,

group – группа, связанная с коммуникатором.

Лекция 12. И.Г. Захарова, кафедра ПО

14

Создание новой группы на основе существующей (1)

int MPI_Group_incl(MPI_Group oldgroup,int n,int *ranks,MPI_Group

*newgroup)

oldgroup – существующая группа, newgroup – созданная группа,

n – количество элементов в массиве ranks , ranks – массив, хранящий ранги процессов,

вошедших в новую группу.

Лекция 12. И.Г. Захарова, кафедра ПО

15

Создание новой группы на основе существующей (2)

int MPI_Group_excl(MPI_Group oldgroup,int n,int *ranks,MPI_Group

*newgroup)

oldgroup – существующая группа, newgroup – созданная группа,

n – количество элементов в массиве ranks , ranks – массив, хранящий ранги процессов, которые будут исключены из новой группы.

Лекция 12. И.Г. Захарова, кафедра ПО

16

Пример: создание двух непересекающихся

групп

size1=size/2;

for(i=1; i<=size1; i++)

{

ranks[i]=i-1;

}

MPI_Group_incl(group, size1, ranks, group1);

MPI_Group_excl(group, size1, ranks, group2);

Лекция 12. И.Г. Захарова, кафедра ПО

17

Операции над группами

На основе существующих групп group1 и group2 может быть создана новая группа newgroup

Объединение:

int MPI_Group_union(MPI_Group group1, MPI_Group group2,MPI_Group *newgroup);

Пересечение:

int MPI_Group_intersection( MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);

Разность:

int MPI_Group_difference( MPI_Group group1, MPI_Group group2, MPI_Group *newgroup);

Лекция 12. И.Г. Захарова, кафедра ПО

18

Пример

В группу gr1 входят процессы 0, 1, 2, 4, 5

В группу gr2 - процессы 0, 2, 3

Нумерация задана в группе, соответствующей

MPI_COMM_WORLD

После вызовов

MPI_Group_intersection(gr1, gr2, *newgr1); MPI_Group_union(gr1, gr2, *newgr2); MPI_Group_difference(gr1, gr2, *newgr3);

В группе newgr1 процессы 0, 2

В группе newgr2 процессы 0, 1, 2, 4, 5, 3

В группе newgr3 процессы 1, 4, 5

Порядок нумерации процессов в новых группах соответствует порядку их перечисления

Лекция 12. И.Г. Захарова, кафедра ПО

19

Получение информации о группе

Количество процессов в группе:

int MPI_Group_size(MPI_Group group, int *size)

group – группа,

size– количество процессов.

Ранг текущего процесса в группе:

int MPI_Group_rank(MPI_Group group, int *rank)

group – группа,

rank– ранг процесса в группе.

Лекция 12. И.Г. Захарова, кафедра ПО

20

Удаление группы

После завершения использования группы ее надо удалить с помощью функции:

int MPI_Group_free(MPI_Group group) group – группа.

Удаление группы не затрагивает коммуникаторы, в которых она используется.

Лекция 12. И.Г. Захарова, кафедра ПО

Соседние файлы в папке магПП2013