Функции работы с группами
Функция определения числа процессов в группе MPI_Group_size. С: MPI_Group_size(MPI_Group group, int *size) FORTRAN: MPI_GROUP_SIZE(GROUP, SIZE, IERROR) INTEGER GROUP, SIZE, IERROR
Функция возвращает число процессов в группе. Если group = MPI_GROUP_EMPTY, тогда size = 0. Функция определения номера процесса в группе MPI_Group_rank. С: MPI_Group_rank(MPI_Group group, int *rank) FORTRAN: MPI_GROUP_RANK(GROUP, RANK, IERROR) INTEGER GROUP, RANK, IERROR
Функция MPI_Group_rank возвращает номер процесса в группе, вызвавшего функцию. Если процесс не является членом группы, то возвращается значение MPI_UNDEFINED. Функция установки соответствия между номерами процессов в двух группах MPI_Group_translate_ranks. С: MPI_Group_translate_ranks (MPI_Group group1, int n, int *ranks1, MPI_Group group2, int *ranks2) FORTRAN: MPI_GROUP_TRANSLATE_RANKS(GROUP1,N, RANKS1, GROUP2, RANKS2, IERROR) INTEGER GROUP1, N, RANKS1(*), GROUP2, RANKS2(*), IERROR
Функция определяет относительные номера одних и тех же процессов в двух разных группах. Если процесс во второй группе отсутствует, то для него устанавливается значениеа MPI_UNDEFINED. Для создания новых групп в MPI имеется 8 функций. Группа может быть создана либо с помощью коммуникатора, либо с помощью операций над множествами процессов других групп. Функция создания группы с помощью коммуникатора MPI_Comm_group. С: MPI_Comm_group(MPI_Comm comm, MPI_Group *group) FORTRAN: MPI_COMM_GROUP(COMM, GROUP, IERROR) INTEGER COMM, GROUP, IERROR
Функция создает группу group для множества процессов, входящих в область связи коммуникатора comm. Следующие три функции имеют одинаковый синтаксис и создают новую группу как результат операции над множествами процессов двух групп. С: MPI_Group_union(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPI_Group_intersection(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) MPI_Group_difference(MPI_Group group1, MPI_Group group2, MPI_Group *newgroup) FORTRAN: MPI_GROUP_UNION(GROUP1, GROUP2, NEWGROUP, IERROR) MPI_GROUP_INTERSECTION(GROUP1, GROUP2, NEWGROUP, IERROR) MPI_GROUP_DIFFERENCE(GROUP1, GROUP2, NEWGROUP, IERROR) INTEGER GROUP1, GROUP2,NEWGROUP, IERROR
Операции определяются следующим образом:
Созданная группа может быть пустой, что эквивалентно MPI_GROUP_EMPTY. Новые группы могут быть созданы с помощью различных выборок из существующей группы. Следующие две функции имеют одинаковый синтаксис, но являются дополнительными по отношению друг к другу. С: MPI_Group_incl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) MPI_Group_excl(MPI_Group group, int n, int *ranks, MPI_Group *newgroup) FORTRAN: MPI_GROUP_INCL(GROUP, N, RANKS, NEWGROUP, IERROR) MPI_GROUP_EXCL(GROUP, N, RANKS, NEWGROUP, IERROR) INTEGER GROUP, N, RANKS(*), NEWGROUP, IERROR
Функция MPI_Group_incl создает новую группу, которая состоит из процессов существующей группы, перечисленных в массиве ranks. Процесс с номером i в новой группе есть процесс с номером ranks[i] в существующей группе. Каждый элемент в массиве ranks должен иметь корректный номер в группе group, и среди этих элементов не должно быть совпадающих. Функция MPI_Group_excl создает новую группу из тех процессов group, которые не перечислены в массиве ranks. Процессы упорядочиваются как в группе group. Каждый элемент в массиве ranks должен иметь корректный номер в группе group, и среди них не должно быть совпадающих. Две следующие функции по смыслу совпадают с предыдущими, но используют более сложное формирование выборки. Массив ranks заменяется двумерным массивом ranges, представляющим собой набор триплетов для задания диапазонов процессов. С: MPI_Group_range_incl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) MPI_Group_range_excl(MPI_Group group, int n, int ranges[][3], MPI_Group *newgroup) FORTRAN: MPI_GROUP_RANGE_INCL(GROUP, N, RANGES, NEWGROUP, IERROR) MPI_GROUP_RANGE_EXCL(GROUP, N, RANGES, NEWGROUP, IERROR) INTEGER GROUP, N, RANGES(3,*), NEWGROUP, IERROR Каждый триплет имеет вид: нижняя граница, верхняя граница, шаг. Уничтожение созданных групп выполняется функцией MPI_Group_free. С: MPI_Group_free(MPI_Group *group) FORTRAN: MPI_GROUP_FREE(GROUP, IERROR) INTEGER GROUP, IERROR INOUT group - уничтожаемая группа.
|