next up previous contents
Next: Конструкторы коммуникаторов Up: Управление коммуникаторами Previous: Управление коммуникаторами   Contents

Доступ к коммуникаторам

Все следующие операции являются локальными.

Синтаксис функции MPI_COMM_SIZE представлен ниже

MPI_COMM_SIZE(comm, size)

IN comm коммуникатор (дескриптор)
OUT size количество процессов в группе comm (целое)

int MPI_Comm_size(MPI_Comm comm, int *size)

MPI_COMM_SIZE(COMM, SIZE, IERROR)
INTEGER COMM, SIZE, IERROR

int MPI::Comm::Get_size() const

Объяснение: Функция MPI_COMM_SIZE эквивалентна: функции MPI_COMM_GROUP по доступу к группе коммуникатора; функции MPI_GROUP_SIZE по вычислению размера; функции
MPI_GROUP_FREE по удалению временной группы. Совокупность этих операций используется так часто, что понадобилось сокращение в виде функции MPI_COMM_SIZE.[]

Совет пользователям: Функция MPI_COMM_SIZE указывает число процессов в коммуникаторе. Для MPI_COMM_WORLD она указывает общее количество доступных процессов (для этой версии MPI не имеется никакого стандартного способа изменить число процессов после инициализации).

Запрос MPI_COMM_RANK указывает номер вызывающего процесса, который располагается в диапазоне от 0 до size-1, где size - возвращаемое значение MPI_COMM_SIZE.[]

Синтаксис функции MPI_COMM_RANK представлен ниже

MPI_COMM_RANK(comm, rank)

IN comm коммуникатор (дескриптор)
OUT rank номер вызывающего процесса в группе comm (целое)

int MPI_Comm_rank(MPI_Comm comm, int *rank)

MPI_COMM_RANK(COMM, RANK, IERROR)
INTEGER COMM, RANK, IERROR

int MPI::Comm::Get_rank() const

Объяснение: Эта функция эквивалентна: по доступу к группе коммуникатора - функции MPI_COMM_GROUP; по вычислению номера - функции MPI_GROUP_RANK; по удалению временной группы - MPI_GROUP_FREE. Совокупность этих операций используется так часто, что оказалось полезным ввести функцию MPI_COMM_RANK.[]

Совет пользователям: Функция MPI_COMM_RANK возвращает номер процесса в частной группе коммуникатора. Это удобно использовать, как отмечено выше, cовместно с MPI_COMM_SIZE.

В модели клиент-сервер создается много программ, где один процесс (обычно процесс ноль) играет роль распорядителя, а другие процессы служат вычислительными узлами. В такой структуре два предшествующих запроса полезны для определения ролей различных процессов коммуни-
катора.[]

Синтаксис функции MPI_COMM_COMPARE представлен ниже

MPI_COMM_COMPARE(comm1, comm2, result)

IN comm1 первый коммуникатор (дескриптор)
IN comm2 второй коммуникатор (дескриптор)
OUT result результат (целое)

int MPI_Comm_compare(MPI_Comm comm1, MPI_Comm comm2, int *result)

MPI_COMM_COMPARE(COMM1, COMM2, RESULT, IERROR)
INTEGER COMM1, COMM2, RESULT, IERROR

static int MPI::Comm::Compare(const MPI::Comm& comm1, const MPI::Comm& comm2)

Результат MPI_IDENT появляется тогда и только тогда, когда comm1 и comm2 являются дескрипторами одного и того же объекта (идентичные группы и одинаковые контексты). Результат MPI_CONGRUENT появляется, если исходные группы идентичны по компонентам и нумерации; эти коммуникаторы отличаются только контекстом. Результат MPI_SIMILAR имеет место, если члены группы обоих коммуникаторов являются одинаковыми, но порядок их нумерации различен. В противном случае выдается результат MPI_UNEQUAL.


next up previous contents
Next: Конструкторы коммуникаторов Up: Управление коммуникаторами Previous: Управление коммуникаторами   Contents
Alex Otwagin 2002-12-10