Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_MPI_OpenMP.doc
Скачиваний:
11
Добавлен:
16.11.2019
Размер:
1.09 Mб
Скачать

1. Mpi_Cart_create(mpi_Comm comm_old, int ndims, int *dims, int *periods, int reorder, mpi_Comm *comm_cart)

IN comm_old исходный коммуникатор (дескриптор)

IN ndims размерность создаваемой декартовой решетки (целое)

IN dims массив размера ndims, определяет количество процессов по каждой координате

IN periods массив логических элементов размера ndims, определяет, периодична (true) или нет (false) решетка в каждой размерности

IN reorder нумерация может быть сохранена (false) или переупорядочена (true)

OUT comm_cart коммуникатор новой декартовой топологии (дескриптор)

Функция MPI_Cart_create является коллективной, создает новый коммуникатор для описания декартовой топологии произвольной размерности. По каждой координате устанавливается признак периодичности. Если reorder = false, то номер каждого процесса в новой группе идентичен номеру в старой группе. Иначе функция может переупорядочить процессы (возможно, чтобы обеспечить хорошее наложение виртуальной топологии на физическую систему). Если полная размерность декартовой решетки меньше количества процессов в группе, то некоторые процессы возвращаются с результатом MPI_COMM_NULL. Вызов будет неверным, если он задает решетку большего размера, чем размер группы.

2. Mpi_Dims_create(int nnodes, int ndims, int *dims)

IN nnodes количество узлов решетки (целое)

IN ndims число размерностей (координат) декартовой решетки (целое)

INOUT dims целочисленный массив размера ndims, определяет количество процессов по каждой координате

Задает количество процессов по каждой размерности (координате). Элементы массива dims описывают декартову решетку координат с числом размерностей ndims и общим количеством узлов nnodes.

Если размерность dims[i] - положительное число, функция не будет изменять число узлов в направлении i; будут изменены только те элементы, для которых dims[i] = 0. Отрицательные значения dims[i] неверны. Также будет неверно, если значение nnodes не кратно произведению dims[i]. Аргумент dims[i], установленный вызывающей программой, будет упорядочен по убыванию. Массив dims удобен для использования в функции MPI_Cart_create в качестве входного. Функция является локальной.

Пример: Массив dims перед вызовом вызов функции, dims после выхода из функции

(0,0) MPI_DIMS_CREATE(6, 2, dims) (3,2)

(0,0) MPI_DIMS_CREATE(7, 2, dims) (7,1)

Функции запроса декартовой топологии

1. Mpi_Cartdim_get(mpi_Comm comm, int *ndims)

IN comm коммуникатор с декартовой топологией (дескриптор)

OUT ndims число размерностей в декартовой топологии системы (целое)

2. Mpi_Cart_get(mpi_Comm comm, int maxdims, int *dims, int *periods, int *coords)

IN comm коммуникатор с декартовой топологией (дескриптор)

IN maxdims длина векторов dims, periods и coords (целое)

OUT dims число процессов по каждой декартовой размерности (целочисленный массив)

OUT periods периодичность ( true/ false) для каждой декартовой размерности (массив логических элементов)

OUT coords координаты вызываемых процессов в декартовой системе координат (целочисленный массив)