ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
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)
1...,68,69,70,71,72,73,74,75,76,77 79,80,81,82,83,84,85,86,87,88,...180