ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
76
•
dims — целочисленный массив, задающий количество процессов для ка-
ждого измерения;
•
periods — массив логических значений, задающих периодичность
("истина", если решетка периодическая) для каждого измерения;
•
coords — целочисленный массив, задающий декартовы координаты вызы-
вающего подпрограмму процесса.
С помощью подпрограммы MPI_Cart_map можно определить ранг процесса
(newrank) в декартовой топологии после переупорядочения процессов:
int MPI_Cart_map(MPI_Comm comm_old, int ndims, int *dims, int
*periods,int *newrank)
MPI_CART_MAP(COMM_OLD, NDIMS, DIMS, PERIODS, NEWRANK, IERR)
Входные параметры:
•
comm — коммуникатор;
•
ndims — размерность декартовой решетки;
•
dims — целочисленный массив, состоящий из ndims элементов, который
определяет количество процессов вдоль каждого измерения;
•
periods — логический массив размера ndims, определяющий периодичность
решетки вдоль каждого измерения.
Если процесс не принадлежит решетке, подпрограмма возвращает значение
MPI_UNDEFINED.
Между процессами, организованными в декартову решетку, могут выполнять-
ся обмены особого вида. Это сдвиги, о которых мы уже упоминали. Имеются два
типа сдвигов данных по группе из
N
процессов:
•
циклический сдвиг
на
J
позиций вдоль ребра решетки. Данные от процесса
К
пересылаются процессу (
J
+
К)
mod
N;
•
линейный сдвиг
на
J
позиций вдоль ребра решетки, когда данные в процессе
К
пересылаются процессу
J
+
К,
если ранг адресата находится в пределах
между 0 и
N.
Ранги источника (source) сообщения, которое должно быть принято, и адреса-
та (dest), который должен получить сообщение для заданного направления сдвига
(direction) и его величины (disp), можно определить с помощью подпрограммы
MPI_Cart_shift:
int MPI_Cart_shift(MPI_Comm comm, int direction, int displ,int
*source, int *dest)
MPI_CART_SHIFT(COMM, DIRECTION, DISPL, SOURCE, DEST, IERR)