next up previous contents
Next: Декомпозиция декартовых структур Up: Топологические конструкторы Previous: Топологические функции запроса   Contents

Сдвиг в декартовых координатах

Если используется декартова топология, то операцию MPI_SENDRECV можно выполнить путем сдвига данных вдоль направления координаты. В качестве входного параметра MPI_SENDRECV использует номер процесса-отправителя для приема и номер процесса-получателя - для передачи. Если функция MPI_CART_SHIFT выполняется для декартовой группы процессов, то она передает вызывающему процессу эти номера, которые затем могут быть использованы для MPI_SENDRECV. Пользователь определяет направление координаты и величину шага (положительный или отрицательный). Эта функция является локальной.

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

MPI_CART_SHIFT(comm, direction, disp, rank_source, rank_dest)

IN comm коммуникатор с декартовой топологией (дескриптор)
IN direction координата сдвига (целое)
IN disp направление смещения (> 0: смещение вверх, < 0: смещение вниз) (целое)
OUT rank_source номер процесса-отправителя (целое)
OUT rank_dest номер процесса-получателя (целое)

int MPI_Cart_shift(MPI_Comm comm, int direction,
int disp, int *rank_source, int *rank_dest)

MPI_CART_SHIFT(COMM, DIRECTION, DISP,
RANK_SOURCE, RANK_DEST, IERROR)
INTEGER COMM, DIRECTION, DISP, RANK_SOURCE, RANK_DEST, IERROR

void MPI::Cartcomm::Shift(int direction, int disp,
int& rank_source, int& rank_dest) const

Аргумент direction указывает размерность, то есть координату, по которой сдвигаются данные. Координаты маркируются от 0 до ndims-1, где ndims - число размерностей.

В зависимости от периодичности декартовой группы в указанном направлении координаты, MPI_CART_SHIFT указывает признаки для кольцевого сдвига или для сдвига без переноса. В случае сдвига без переноса в rank_source или rank_dest может быть возвращено значение MPI_PROC_NULL для указания, что процесс-отправитель или процесс-получатель при сдвиге вышли из диапазона.

Пример 6.4 Коммуникатор comm имеет двумерную периодическую декартову топологию. Двумерная матрица элементов типа REAL хранит один элемент на процесс в переменной A. Нужно выполнить скошенное преобразование матрицы путем сдвига столбца i (вертикально, то есть вдоль столбца) i раз.

.... C определяется номер процесса CALL MPI_COMM_RANK(comm, rank, ierr) C опеределяются декартовы координаты CALL MPI_CART_COORDS(comm, rank, maxdims, coords, ierr) C вычисляются номера процесса-отправителя и процесса-получателя при сдвиге CALL MPI_CART_SHIFT(comm, 0, coords(2), source, dest, ierr) C "скошенный" массив CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, dest, 0, source, 0, comm, status, ierr)

Совет пользователям: В языке ФОРТРАН размерность, обозначенная как DIRECTION = i, имеет DIMS (i + 1) узлов, где DIMS - массив, который был использован для создания решетки. В языке Си размерность, обозначенная DIRECTION =i есть размерность, указаная DIMS [i].[]


next up previous contents
Next: Декомпозиция декартовых структур Up: Топологические конструкторы Previous: Топологические функции запроса   Contents
Alex Otwagin 2002-12-10