Студопедия — Декартова топология
Студопедия Главная Случайная страница Обратная связь

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

Декартова топология






Обобщением линейной и матричной топологий на произвольное число измерений является декартова топология. Для создания коммуникатора с декартовой топологией используется функция MPI_Cart_create. С помощью этой функции можно создавать топологии с произвольным числом измерений, причем по каждому измерению в отдельности можно накладывать периодические граничные условия. Таким образом, для одномерной топологии мы можем получить или линейную структуру, или кольцо - в зависимости от того, какие граничные условия будут наложены. Для двумерной топологии, соответственно, либо прямоугольник, либо цилиндр, либо тор. Заметим, что не требуется специальной поддержки гиперкубовой структуры, поскольку она представляет собой n-мерный тор с двумя процессами вдоль каждого координатного направления.

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

С:

MPI_Cart_create(MPI_Comm comm_old, int ndims, int *dims,

int *periods, int reorder, MPI_Comm *comm_cart)

FORTRAN:

MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS,

REORDER, COMM_CART, IERROR)

INTEGER COMM_OLD, NDIMS, DIMS(*), COMM_CART, IERROR

LOGICAL PERIODS(*), REORDER

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)

FORTRAN:

MPI_DIMS_CREATE(NNODES, NDIMS, DIMS, IERROR)

INTEGER NNODES, NDIMS, DIMS(*), IERROR

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)

FORTRAN:

MPI_CARTDIM_GET(COMM, NDIMS, IERROR)

INTEGER COMM, NDIMS, IERROR

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

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

С:

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

int *periods, int *coords)

FORTRAN:

MPI_CART_GET(COMM, NDIMS, DIMS, PERIODS, COORDS, IERROR)

INTEGER COMM, NDIMS, DIMS(*), COORDS(*), IERROR

LOGICAL PERIODS(*)

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)

FORTRAN:

MPI_CART_RANK(COMM, COORDS, RANK, IERROR)

INTEGER COMM, COORDS(*), RANK, IERROR

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)

FORTRAN:

MPI_CART_COORDS(COMM, RANK, NDIMS, COORDS, IERROR)

INTEGER COMM, RANK, NDIMS, COORDS(*), IERROR

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)

FORTRAN:

MPI_CART_SHIFT(COMM, DIRECTION, DISP, RANK_SOURCE,

RANK_DEST, IERROR)

INTEGER COMM, DIRECTION, DISP, RANK_SOURCE,

RANK_DEST, IERROR

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)

FORTRAN:

MPI_CART_SUB(COMM, REMAIN_DIMS, NEWCOMM, IERROR)

INTEGER COMM, NEWCOMM, IERROR

LOGICAL REMAIN_DIMS(*)

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)

FORTRAN:

MPI_TOPO_TEST(COMM, STATUS, IERROR)

INTEGER COMM, STATUS, IERROR

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

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

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

 

8.1. Вычисление числа

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

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

program calc_pi
include 'mpif.h'
integer i, n
double precision w, gsum,sum
double precision v
integer np, myid, ierr
real*8 time, mflops, time1, time2, dsecnd

с инициализация MPI и определение процессорной конфигурации

call MPI_INIT(ierr)
call MPI_COMM_RANK(MPI_COMM_WORLD, myid, ierr)
call MPI_COMM_SIZE(MPI_COMM_WORLD, np, ierr)

с информацию с клавиатуры считывает 0-й процессор

if (myid.eq. 0) then
print *, 'Введите число точек разбиения интервала: '
read *, n
time1 = MPI_Wtime()
endif

с рассылка числа точек разбиения всем процессорам







Дата добавления: 2015-09-15; просмотров: 423. Нарушение авторских прав; Мы поможем в написании вашей работы!



Расчетные и графические задания Равновесный объем - это объем, определяемый равенством спроса и предложения...

Кардиналистский и ординалистский подходы Кардиналистский (количественный подход) к анализу полезности основан на представлении о возможности измерения различных благ в условных единицах полезности...

Обзор компонентов Multisim Компоненты – это основа любой схемы, это все элементы, из которых она состоит. Multisim оперирует с двумя категориями...

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

Правила наложения мягкой бинтовой повязки 1. Во время наложения повязки больному (раненому) следует придать удобное положение: он должен удобно сидеть или лежать...

ТЕХНИКА ПОСЕВА, МЕТОДЫ ВЫДЕЛЕНИЯ ЧИСТЫХ КУЛЬТУР И КУЛЬТУРАЛЬНЫЕ СВОЙСТВА МИКРООРГАНИЗМОВ. ОПРЕДЕЛЕНИЕ КОЛИЧЕСТВА БАКТЕРИЙ Цель занятия. Освоить технику посева микроорганизмов на плотные и жидкие питательные среды и методы выделения чис­тых бактериальных культур. Ознакомить студентов с основными культуральными характеристиками микроорганизмов и методами определения...

САНИТАРНО-МИКРОБИОЛОГИЧЕСКОЕ ИССЛЕДОВАНИЕ ВОДЫ, ВОЗДУХА И ПОЧВЫ Цель занятия.Ознакомить студентов с основными методами и показателями...

Значення творчості Г.Сковороди для розвитку української культури Важливий внесок в історію всієї духовної культури українського народу та її барокової літературно-філософської традиції зробив, зокрема, Григорій Савич Сковорода (1722—1794 pp...

Постинъекционные осложнения, оказать необходимую помощь пациенту I.ОСЛОЖНЕНИЕ: Инфильтрат (уплотнение). II.ПРИЗНАКИ ОСЛОЖНЕНИЯ: Уплотнение...

Приготовление дезинфицирующего рабочего раствора хлорамина Задача: рассчитать необходимое количество порошка хлорамина для приготовления 5-ти литров 3% раствора...

Studopedia.info - Студопедия - 2014-2024 год . (0.01 сек.) русская версия | украинская версия