Синтаксис функции MPI_CART_SUB представлен ниже.
MPI_CART_SUB(comm, remain_dims, newcomm)
IN | comm | коммуникатор с декартовой топологией (дескриптор) | |
IN | remain_dims | i-ый элемент в remain_dims показывает, содержится ли i-ая размерность в подрешетке (true) или нет (false) (вектор логических элементов) | |
OUT | newcomm | коммуникатор, содержащий подрешетку, которая включает вызываемый процесс (дескриптор) |
int MPI_Cart_sub(MPI_Comm comm,
int *remain_dims, MPI_Comm *newcomm)
MPI_CART_SUB(COMM, REMAIN_DIMS, NEWCOMM, IERROR)
INTEGER COMM, NEWCOMM, IERROR
LOGICAL REMAIN_DIMS(*)
MPI::Cartcomm MPI::Cartcomm::Sub(const bool remain_dims[]) const
Если декартова топология была создана с помощью MPI_CART_CREATE, то функция MPI_CART_SUB может использоваться для декомпозиции группы в подгруппы, которые являются декартовыми подрешетками, и для построения для каждой подгруппы коммуникаторов с подрешеткой с декартовой топологией. (Эта функция близка к MPI_COMM_SPLIT).
Пример 6.5 Допустим, что функция MPI_CART_CREATE(..., comm) создала решетку размером (2 3 4). Пусть remain_dims = (true, false, true). Тогда обращение к
MPI_CART_SUB (comm, remain_dims, comm_new),
создаст три коммуникатора, каждый с восьмью процессами размерности 24 в декартовой топологии. Если remain_dims = (false, false, true),
то обращение к MPI_CART_SUB (comm,
remain_dims,
comm_new) создает шесть непересекающихся коммуникаторов, каждый с
четырьмя процессами в одномерной декартовой топологии.