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

магПП2013 / lec12ПП

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

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