| |
Ранее было указано, что существует возможность связать с коммуникатором дополнительную информацию, которая находится вне группы и контекста. Эта дополнительная информация кэширована с коммуникатором, и одной из самых важных ее частей является топология. В MPI топология представляет собой механизм для того, чтобы связать с процессами, принадлежащими группе, различные схемы адресации. Топология MPI - виртуальная, т. е. может не существовать никакого простого отношения между структурой процессов, определенной виртуальной топологией и фактической физической структурой параллельной машины.
Известны два основных типа виртуальной топологии, которая может быть создана MPI, - декартова топология, или топология сетки, и топология графа. Первый тип является подмножеством второго. Однако из-за активного использования сеток в приложениях выделяется отдельное подмножество функций MPI, цель которого - манипуляция виртуальными сетками.
В алгоритме Фокса необходимо идентифицировать процессы
MPI_COMM_WORLD
координатами квадратной сетки, причем каждая строка и колонка
сетки должны формировать свой собственный коммуникатор.
Сначала необходимо связать квадратную структуру сетки с
MPI_COMM_WORLD.
Чтобы сделать это, нужно определить следующую информацию:
int dimensions[2];
int wrap_around[2];
int reorder = 1;
dimensions[0] = dimensions[1] = q;
wrap_around[0] = wrap_around[1] = 1;
MPI_Cart_create(MPI_COMM_WORLD, 2, dimensions,
wrap_around, reorder, &grid_comm);
int my_grid_rank;
MPI_Comm_rank(grid_comm, &my_grid_rank);
MPI_Cart_coords(grid_comm, my_grid_rank, 2,
coordinates);
Обратной функцией к MPI_Cart_coords() является
MPI_Cart_rank():
Синтаксис MPI_Cart_create():
int number_of_dims, int* dim_sizes,
int* periods, int reorder, MPI_Comm* cart_comm)
Процессы в cart_comm ранжируются в порядке строк. При этом
первый ряд состоит из процессов 0, 1,..., dim_sizes[0]-1,
второй ряд - из процессов dim_sizes[0],dim_sizes[0]+1 , ... ,
2*dim_sizes[0]-1
и т.д. Таким образом, иногда выгодно изменить относительное ранжирование
процессов в old_comm. Например, пусть физическая топология
- это сетка 3x3,а процессы (номера) в old_comm назначены
на процессоры (квадраты сетки) следующим образом (рис. 5):
3 | 4 | 5 |
0 | 1 | 2 |
6 | 7 | 8 |
Поскольку MPI_Cart_create() создает новый коммуникатор, она является коллективной операцией.
Синтаксис функций, возвращающих адресную информацию:
int* rank);
int MPI_Cart_coords(MPI_Comm comm, int rank,
int number_of_dims, int* coordinates)
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |