Здавалка
Главная | Обратная связь

Группы и коммуникаторы



Интерфейс MPI использует такие понятия, как группы процессов (groups), виртуальные топологии (virtual topologies) и коммуникаторы (communicators).

 

Коммуникаторысоздают область для всех операций обмена в MPI. Коммуникаторы разделяются на два вида: интра-коммуникаторы - внутригрупповые коммуникаторы, предназначенные для операций в пределах группы процессов, и интер-коммуникаторы - межгрупповые коммуникаторы, предназначенные для обменов между двумя группами процессов. Начальный для всех процессов интра-коммуникатор MPI_COMM_WORLD,которыйсоздается сразу при обращении к функции MPI_INIT. Удалить коммуникатор MPI_COMM_WORLDнельзя. Кроме того, существует коммуникатор, который содержит только себя как процесс – MPI_COMM_SELF.

 

Группыопределяют упорядоченную набор процессов по именам, именами процессов являются их порядковые номера. Группы определяют область для выполнения обменов, но в операциях обмена могут использоваться только коммуникаторы. Группа определена в пределах коммуникатора. В MPI определена предопределенная группа: MPI_GROUP_EMPTY – этогруппа без процессов.

 

Виртуальная топологияопределяет отображение номеров процессов в группе на определенную топологию, и наоборот. Для создания виртуальных топологий определены специальные конструкторы, рассматривать которые будем позже.

 

Управление группой

Операции управления являются локальными, и их выполнение не требует меж процессного обмена.

 

Функции доступа к группе

1. MPI_Group_size(MPI_Group group, int *size)позволяет определить размер группы.

IN groupгруппа (дескриптор)

OUT sizeколичество процессов в группе (целое)

 

2. MPI_Group_rank(MPI_Group group, int *rank)служит для определения номера процесса в группе.

IN groupгруппа (дескриптор)

OUT rankномер процесса в группе или MPI_UNDEFINED, если процесс не является членом группы (целое)

 

3. MPI_Group_translate_ranks (MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2)

IN group1группа1 (дескриптор)

IN nчисло номеров в массивах ranks1 и ranks2 (целое)

IN ranks1массив из номеров процессов в группе1

IN group2группа2 (дескриптор)

OUT ranks2массив соответствующих номеров процессов в группе2, MPI_UNDEFINED, если соответствие отсутствует.

 

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

 

MPI_Group _compare(group1, group2, result)

group1первая группа (дескриптор)

group2вторая группа (дескриптор)

OUT resultрезультат (целое)

Функция MPI_Group_compare сравнивает группы. Если члены группы и их порядок в обеих группах одинаковы, результат будет MPI_IDENT. Если члены группы одинаковы, но порядок различен, то результат будет MPI_SIMILAR. В остальных случаях - MPI_UNEQUAL.

Конструкторы групп

Конструкторы создают новые группы на основе существующих групп. Данные операции являются локальными, и различные группы могут быть определены на различных процессах.

 

MPI не имеет механизма для формирования группы с нуля – группа может формироваться только на основе другой, предварительно определенной группы. Базовая группа, на основе которой определены все другие группы, является группой, связанной с коммуникатором MPI_COMM_WORLD(через функцию MPI_COMM_GROUP).

 

1. MPI_Comm_group(MPI_Comm comm, MPI_Group *group)

IN commкоммуникатор (дескриптор)

OUT groupгруппа, соответствующая comm (дескриптор)

 

Функция MPI_Comm_group возвращает в groupдескриптор группы из comm.

2. MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup)

IN group1первая группа (дескриптор)

IN group2вторая группа (дескриптор)

OUT newgroupобъединенная группа (дескриптор)

 

Объединение(union) содержит все элементы первой группы (group1) и следующие за ними элементы второй группы (group2), не входящие в первую группу.

3. MPI_Group_intersection(MPI_Group group1, MPI_Group group2,MPI_Group *newgroup)

IN group1первая группа (дескриптор)

IN group2вторая группа (дескриптор)

OUT newgroupгруппа, образованная пересечением (дескриптор)

 

Пересечение(intersect) содержит все элементы group1, которые также находятся в group2 и упорядоченные, как в первой группе.

 

4. MPI_Group_difference(MPI_Group group1, MPI_Group group2,MPI_Group *newgroup)

IN group1первая группа(дескриптор)

IN group2вторая группа (дескриптор)

OUT newgroupисключенная группа (дескриптор)

 

Разность(difference) содержит все элементы group1, которые не находятся в group2.







©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.