ПАРАЛЛЕЛЬНОЕ ПРОГРАММИРОВАНИЕ
74
Декартова топология
Познакомимся с операциями создания и преобразования
декартовых тополо-
гий
обмена. Подпрограмма MPI_cart_create создает новый коммуникатор comm_cart,
наделяя декартовой топологией исходный коммуникатор comm_old:
int MPI_Cart_create (MPI_Comm comm_old, int ndims, int *dims,
int *periods, int reorder, MPI_Coinm *comm_cart)
MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS, REORDER,
COMM_CART,IERR)
Входные параметры:
comm_old — исходный коммуникатор;
ndims — размерность декартовой решетки;
dims — целочисленный массив, состоящий из ndims элементов, задающий
количество процессов в каждом измерении;
periods — логический массив из ndims элементов, который определяет,
является ли решетка периодической (значение "истина") вдоль каждого из-
мерения;
reorder — при значении этого параметра "истина" системе разрешено
менять порядок нумерации процессов.
Информация о структуре декартовой топологии содержится в параметрах
ndims, dims и periods. MPI_Cart_create является коллективной операцией (эту под-
программу должны вызывать все процессы из коммуникатора, наделяемого декар-
товой топологией).
После создания виртуальной топологии можно использовать соответствую-
щую схему адресации процессов, но для этого требуется пересчет ранга процесса в
его декартовы координаты и наоборот. Определить декартовы координаты процесса
по его рангу в группе можно с помощью подпрограммы MPI_Cart_coords:
int MPI_Cart_coords(MPI_Comm comm, int rank, int maxdims, int
*coords)
MPI_CART_COORDS(COMM, RANK, MAXDIMS, COORDS, IERR)
Входные параметры:
comm — коммуникатор, наделенный декартовой топологией;
rank — ранг процесса в comm;
maxdims — длина вектора coords в вызывающей программе.
Выходным параметром этой подпрограммы является одномерный целочис-
ленный массив coords (его размер равен ndims), содержащий декартовы координаты
процесса. Обратным действием по отношению к MPI_Cart_coords обладает
1...,66,67,68,69,70,71,72,73,74,75 77,78,79,80,81,82,83,84,85,86,...180