В декартовой топологии функция MPI_DIMS_CREATE помогает пользователю выбрать выгодное распределение процессов по каждой координате в зависимости от числа процессов в группе и некоторых ограничений, определеных пользователем. Эта функция используется, чтобы распределить все процессы (размер группы MPI_COMM_WORLD) в n-мерную топологическую среду.
Синтаксис функции MPI_DIMS_CREATE представлен ниже.
MPI_DIMS_CREATE(nnodes, ndims, dims)
IN | nnodes | количество узлов решетки (целое) | |
IN | ndims | число размерностей декартовой решетки(целое) | |
INOUT | dims | целочисленный массив размера ndims, указывающий количество вершин в каждой размерности. |
int MPI_Dims_create(int nnodes, int ndims, int *dims)
MPI_DIMS_CREATE(NNODES, NDIMS, DIMS, IERROR)
INTEGER NNODES, NDIMS, DIMS(*), IERROR
void MPI::Compute_dims(int nnodes, int ndims, int dims[])
Элементы массива dims описывают декартову решетку координат с числом размерностей ndims и общим количеством узлов nnodes. Количество узлов по размерностям нужно сделать насколько возможно близкими друг другу, используя соответствующий алгоритм делимости. Вызывающая подпрограмма может дальше ограничить выполнение этой функции, задавая количество элементов массива dims. Если размерность dims[i] есть положительное число, функция не будет изменять число узлов в направлении i; будут изменены только те элементы, для которых dims[i] = 0.
Отрицательные значения dims[i] неверны. Также будет неверно, если значение nnodes не кратно произведению dims[i].
Аргументdims[i], установленный вызывающей программой, будет упорядочен по убыванию. Массив dims удобен для использования в качестве входного для функции MPI_CART_CREATE. Функцией MPI_DIMS_CREATE является локальной.
Пример 6.1
dims перед вызовом | вызов функции | dims после возврата управления |
(0,0) | MPI_DIMS_CREATE(6, 2, dims) | (3,2) |
(0,0) | MPI_DIMS_CREATE(7, 2, dims) | (7,1) |
(0,3,0) | MPI_DIMS_CREATE(6, 3, dims) | (2,3,1) |
(0,3,0) | MPI_DIMS_CREATE(7, 3, dims) | неверный вызов |