Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


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




С:

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 - логическая переменная, указывает, производить перенумерацию процессов (true) или нет (false);
OUT comm_cart - новый коммуникатор.

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

Остальные функции, которые будут рассмотрены в этом разделе, имеют вспомогательный или информационный характер.

Функция определения оптимальной конфигурации сетки

С:

MPI_Dims_create(int nnodes, int ndims, int *dims)

 

IN nnodes - общее число узлов в сетке;
IN ndims - число измерений;
INOUT dims - массив целого типа размерности ndims, в который помещается рекомендуемое число процессов вдоль каждого измерения.

На входе в процедуру в массив dims должны быть занесены целые неотрицательные числа. Если элементу массива dims[i] присвоено положительное число, то для этой размерности вычисление не производится (число процессов вдоль этого направления считается заданным). Вычисляются только те компоненты dims[i], для которых перед обращением к процедуре были присвоены значения 0. Функция стремится создать максимально равномерное распределение процессов вдоль направлений, выстраивая их по убыванию, т.е. для 12-ти процессов она построит трехмерную сетку 4 х 3 х 1. Результат работы этой процедуры может использоваться в качестве входного параметра для процедуры MPI_Cart_create.

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

С:

MPI_Cartdim_get(MPI_Comm comm, int *ndims)

 

IN comm - коммуникатор с декартовой топологией;
OUT ndim - число измерений в декартовой топологии.

Функция возвращает число измерений в декартовой топологии ndims для коммуникатора comm.

Результат может быть использован в качестве параметра для вызова функции MPI_Cart_get, которая служит для получения более детальной информации.

С:

MPI_Cart_get(MPI_Comm comm, int ndims, int *dims,

int *periods, int *coords)

 

IN comm - коммуникатор с декартовой топологией;
IN ndims - число измерений;
OUT dims - массив размера ndims, в котором возвращается число процессов вдоль каждого измерения;
OUT periods - логический массив размера ndims, в котором возвращаются наложенные граничные условия; (true - периодические, false - непериодические);
OUT coords - координаты в декартовой сетке вызывающего процесса.

Две следующие функции устанавливают соответствие между идентификатором процесса и его координатами в декартовой сетке. Под идентификатором процесса понимается его номер в исходной области связи, из которой была создана декартова топология.

Функция получения идентификатора процесса по его координатам MPI_Cart_rank

С:

MPI_Cart_rank(MPI_Comm comm, int *coords, int *rank)

 

IN comm - коммуникатор с декартовой топологией;
IN coords - координаты в декартовой системе;
OUT rank - идентификатор процесса.

Для измерений с периодическими граничными условиями будет выполняться приведение к основной области определения 0 <= coords(i) < dims(i).

Функция определения координат процесса по его идентификатору MPI_Cart_coords

С:

MPI_Cart_coords(MPI_Comm comm, int rank, int ndims, int *coords)

 

IN comm - коммуникатор с декартовой топологией;
IN rank - идентификатор процесса;
IN ndim - число измерений;
OUT coords - координаты процесса в декартовой топологии.

Во многих численных алгоритмах используется операция сдвига данных вдоль каких-то направлений декартовой решетки. В MPI существует специальная функция MPI_Cart_shift, реализующая эту операцию. Точнее говоря, сдвиг данных осуществляется с помощью функции MPI_Sendrecv, а функция MPI_Cart_shift вычисляет для каждого процесса параметры для функции MPI_Sendrecv (source и dest).

Функция сдвига данных MPI_Cart_shift

С:

MPI_Cart_shift(MPI_Comm comm, int direction, int disp,

int *rank_source, int *rank_dest)

 

IN comm - коммуникатор с декартовой топологией;
IN direction - номер измерения, вдоль которого выполняется сдвиг;
IN disp - величина сдвига (может быть как положительной, так и отрицательной);
OUT rank_sourceа - номер процесса, от которого должны быть получены данные;
OUT rank_dest - номер процесса, которому должны быть посланы данные.

Номер измерения и величина сдвига не обязаны быть одинаковыми для всех процессов. В зависимости от граничных условий сдвиг может быть либо циклический, либо с учетом граничных процессов. В последнем случае для граничных процессов возвращается MPI_PROC_NULL либо для переменной rank_source, либо для rank_dest. Это значение также может быть использовано при обращении к функции MPI_sendrecv.

Другая часто используемая операция - выделение в декартовой топологии подпространств меньшей размерности и связывание с ними отдельных коммуникаторов.

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

С:

MPI_Cart_sub(MPI_Comm comm, int *remain_dims,

MPI_Comm *newcomm)

 

IN comm - коммуникатор с декартовой топологией;
IN remain_dims - логический массив размера ndims, указывающий, входит ли i-e измерение в новую подрешетку (remain_dims[i] = true);
OUT newcomm - новый коммуникатор, описывающий подрешетку, содержащую вызывающий процесс.

Функция является коллективной. Действие функции проиллюстрируем следующим примером. Предположим, что имеется декартова решетка 2 х 3 х 4, тогда обращение к функции MPI_Cart_sub с массивом remain_dims (true, false, true) создаст три коммуникатора с топологией 2 х 4. Каждый из коммуникаторов будет описывать область связи, состоящую из 1/3 процессов, входивших в исходную область связи.

Кроме рассмотренных функций, в MPI входит набор из 6 функций для работы с коммуникаторами с топологией графов, которые в данном методическом пособии мы рассматривать не будем.

Для определения топологии коммуникатора служит функция MPI_Topo_test.

С:

MPI_Topo_test(MPI_Comm comm, int *status)

 

IN comm - коммуникатор;
OUT status - топология коммуникатора.

Функция MPI_Topo_test возвращает через переменную status топологию коммуникатора comm. Возможные значения:

MPI_GRAPH - топология графа;
MPI_CART - декартова топология;
MPI_UNDEFINED - топология не задана.

 





Поделиться с друзьями:


Дата добавления: 2016-07-29; Мы поможем в написании ваших работ!; просмотров: 425 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Не будет большим злом, если студент впадет в заблуждение; если же ошибаются великие умы, мир дорого оплачивает их ошибки. © Никола Тесла
==> читать все изречения...

2613 - | 2287 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.007 с.