6.2. Функции работы с группами
Функция определения числа процессов в группе MPI_Group_size
IN | group | - группа; |
OUT | size | - число процессов в группе. |
Функция возвращает число процессов в группе. Если group = MPI_GROUP_EMPTY, тогда size = 0.
Функция определения номера процесса в группе MPI_Group_rank
IN | group | - группа; |
OUT | rank | - номер процесса в группе. |
Функция MPI_Group_rank возвращает номер в группе процесса, вызвавшего функцию. Если процесс не является членом группы, то возвращается значение MPI_UNDEFINED.
Функция установки соответствия между номерами процессов в двух группах MPI_Group_translate_ranks
IN | group1 | - | группа1; |
IN | n | - | число процессов, для которых устанавливается соответствие; |
IN | ranks1 | - | массив номеров процессов из 1-й группы; |
IN | group2 | - | группа2; |
OUT | ranks2 | - | номера тех же процессов во второй группе. |
Функция определяет относительные номера одних и тех же процессов в двух разных группах. Если процесс во второй группе отсутствует, то для него устанавливается значениеа MPI_UNDEFINED.
Для создания новых групп в MPI имеется 8 функций. Группа может быть создана либо с помощью коммуникатора, либо с помощью операций над множествами процессов других групп.
Функция создания группы с помощью коммуникатора MPI_Comm_group
IN | comm | - коммуникатор; |
OUT | group | - группа. |
Функция создает группу group для множества процессов, входящих в область связи коммуникатора comm.
Следующие три функции имеют одинаковый синтаксис и создают новую группу как результат операции над множествами процессов двух групп.
IN | group1 | - первая группа; |
IN | group2 | - вторая группа; |
OUT | newgroup | - новая группа. |
Операции определяются следующим образом:
Union | - | формирует новую группу из элементов 1-й группы и из элементов 2-й группы, не входящих в 1-ю (объединение множеств). |
Intersection | - | новая группа формируется из элементов 1-й группы, которые входят также и во 2-ю. Упорядочивание как в 1-й группе (пересечение множеств). |
Difference | - | новую группу образуют все элементы 1-й группы, которые не входят во 2-ю. Упорядочивание как в 1-й группе (дополнение множеств). |
Созданная группа может быть пустой, что эквивалентно MPI_GROUP_EMPTY.
Новые группы могут быть созданы с помощью различных выборок из существующей группы. Следующие две функции имеют одинаковый синтаксис, но являются дополнительными по отношению друг к другу.
IN | group | - существующая группа; |
IN | n | - число элементов в массиве ranks; |
IN | ranks | - массив номеров процессов; |
OUT | newgroup | - новая группа. |
Функция MPI_Group_incl создает новую группу, которая состоит из процессов существующей группы, перечисленных в массиве ranks. Процесс с номером i в новой группе есть процесс с номером ranks[i] в существующей группе. Каждый элемент в массиве ranks должен иметь корректный номер в группе group, и среди этих элементов не должно быть совпадающих.
Функция MPI_Group_excl создает новую группу из тех процессов group, которые не перечислены в массиве ranks. Процессы упорядочиваются как в группе group. Каждый элемент в массиве ranks должен иметь корректный номер в группе group, и среди них не должно быть совпадающих.
Две следующие функции по смыслу совпадают с предыдущими, но используют более сложное формирование выборки. Массив ranks заменяется двумерным массивом ranges, представляющим собой набор триплетов для задания диапазонов процессов.
Каждый триплет имеет вид: нижняя граница, верхняя граница, шаг.
Уничтожение созданных групп выполняется функцией MPI_Group_free.
INOUT group - уничтожаемая группа.