Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

Топологии




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

Создание нового коммуникатора comm_cart посредством наделения декартовой топологией исходный коммуникатор comm_old (рис. 3.10)

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

int *periods, int reorder, MPI_Comm *comm_cart)

MPI_CART_CREATE(COMM_OLD, NDIMS, DIMS, PERIODS, REORDER, COMM_CART, IERR)

Входные параметры:

  • comm_old - исходный коммуникатор;
  • ndims - размерность декартовой решетки;
  • dims -целочисленный массив, состоящий из ndims элементов, задающий количество процессов в каждом измерении;
  • periods - логический массив из ndims элементов, который определяет, является ли решетка периодической (значениеtrue) вдоль каждого измерения;
  • reorder - при значении этого параметра "истина", системе разрешено менять порядок нумерации процессов.

Информация о структуре декартовой топологии содержится в параметрах ndims, dims и periods. MPI_Cart_create является коллективной операцией (эту подпрограмму должны вызывать все процессы из коммуникатора, наделяемого декартовой топологией).


Рис. 3.10. Декартова топология

Определение декартовых координат процесса по его рангу в группе

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

 

MPI_CART_COORDS(COMM, RANK, MAXDIMS, COORDS, IERR)

Входные параметры:

  • comm - коммуникатор, наделенный декартовой топологией;
  • rank - ранг процесса в comm;
  • maxdims - длина вектора coords в вызывающей программе.

Выходной параметр:

  • coords - одномерный целочисленный массив (его размер равен ndims), содержащий декартовы координаты процесса.

Определение ранга процесса (rank) по его декартовым координатам в коммуникаторе comm int

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

 

MPI_CART_RANK(COMM, COORDS, RANK, IERR)

Входной параметр:

  • coords - целочисленный массив размера ndims, задающий декартовы координаты процесса. Как MPI_Cart_rank, так и MPI_Cart_coords локальны.

Расщепление коммуникатора comm на подгруппы, соответствующие декартовым подрешеткам меньшей размерности

int MPI_Cart_sub(MPI_Comm comm, int *remain_dims, MPI_Comm *comm_new)

MPI_CART_SUB(COMM, REMAIN_DIMS, COMM_NEW, IERR)

I -й элемент массива remain_dims определяет, содержится ли I-е измерение в подрешетке ("истина"). Выходной параметр:

  • newcomm - коммуникатор, содержащий подрешетку, которой принадлежит данный процесс.

Подпрограмма MPI_Cart_sub используется только с коммуникатором, наделенным декартовой топологией.

Получение информации о декартовой топологии, связанной с коммуникатором comm

int MPI_Cart_get(MPI_Comm comm, int maxdims, int *dims, int *periods, int *coords)

 

MPI_CART_GET(COMM, MAXDIMS, DIMS, PERIODS, COORDS, IERR)

Входной параметр:

  • maxdims - задает длину массивов dims, periods и vectors в вызывающей программе

Выходные параметры:

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

Определение ранга процесса (newrank) в декартовой топологии после переупорядочения процессов

int MPI_Cart_map(MPI_Comm comm_old, int ndims, int *dims, int *periods, int *newrank)

MPI_CART_MAP(COMM_OLD, NDIMS, DIMS, PERIODS, NEWRANK, IERR)

Входные параметры:

  • comm - коммуникатор;
  • ndims - размерность декартовой решетки;
  • dims - целочисленный массив, состоящий из ndims элементов, который определяет количество процессов вдоль каждого измерения;
  • periods - логический массив размера ndims, определяющий периодичность решетки вдоль каждого измерения.

Если процесс не принадлежит решетке, подпрограмма возвращает значение MPI_UNDEFINED.

Определение рангов источника (source) сообщения, которое должно быть принято, и адресата (dest), который должен получить сообщение для заданного направления сдвига (direction) и его величины (disp)

int MPI_Cart_shift(MPI_Comm comm, int direction, int displ, int *source, int *dest)

MPI_CART_SHIFT(COMM, DIRECTION, DISPL, SOURCE, DEST, IERR)

Для n -мерной декартовой решетки значение аргумента direction должно находиться в пределах от 0 до n-1.

Определение размерности (ndims) декартовой топологии, связанной с коммуникатором

int MPI_Cartdim_get(MPI_Comm comm, int *ndims) MPI_CARTDIM_GET(COMM, NDIMS, IERR)

Создание нового коммуникатора comm_graph, наделенного топологией графа (рис. 3.11)

int MPI_Graph_create(MPI_Comm comm, int nnodes, int *index,

int *edges, int reorder, MPI_Comm *comm_graph)

 

MPI_GRAPH_CREATE(COMM, NNODES, INDEX, EDGES, REORDER, COMM_GRAPH, IERR)

Входные параметры:

  • comm - исходный коммуникатор, не наделенный топологией;
  • nnodes - количество вершин графа;
  • index - целочисленный одномерный массив, содержащий порядок каждого узла (количество связанных с ним ребер);
  • edges - целочисленный одномерный массив, описывающий ребра графа;
  • reorder - значение "истина" разрешает изменение порядка нумерации процессов.


Рис. 3.11. Виртуальная топология графа

Определение вершин графа, соседних с данной

int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int *neighbors)

MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERR)

Входные параметры:

  • comm - коммуникатор с топологией графа;
  • rank - ранг процесса в группе коммуникатора comm;
  • maxneighbors - размер массива neighbors.

Выходной параметр:

  • neighbors - массив, содержащий ранги процессов, соседних с данным.

Определение количества соседей (nneighbors) узла, связанного с топологией графа

int MPI_Graph_neighbors_count(MPI_Comm comm, int rank, int *nneighbors)

 

MPI_GRAPH_NEIGHBORS_COUNT(COMM, RANK, NNEIGHBORS, IERR)

Входные параметры:

  • comm - коммуникатор;
  • rank - ранг процесса-узла.

Получение информации о топологии графа, связанной с коммуникатором comm

int MPI_Graph_get(MPI_Comm comm, int maxindex, int maxedges, int *index, int *edges)

 

MPI_GRAPH_GET(COMM, MAXINDEX, MAXEDGES, INDEX, EDGES, IERR)

Входные параметры:

  • comm - коммуникатор;
  • maxindex - длина массива index в вызывающей программе;
  • maxedges - длина массива edges в вызывающей программе.

Выходные параметры:

  • index - целочисленный массив, содержащий структуру графа (см. описание подпрограммы MPI_Graph_create);
  • edges - целочисленный массив, содержащий сведения о ребрах графа.

Определение ранга процесса в топологии графа после переупорядочения (newrank)

int MPI_Graph_map(MPI_Comm comm, int nnodes, int *index, int *edges, int *newrank)

MPI_GRAPH_MAP(COMM, NNODES, INDEX, EDGES, NEWRANK, IERR)

Входные параметры:

  • comm - коммуникатор;
  • nnodes - количество вершин графа;
  • index - целочисленный массив, задающий структуру графа (см. описание подпрограммы MPI_Graph_create);
  • edges - целочисленный массив, задающий ребра графа.

Если процесс не принадлежит графу, подпрограмма возвращает значение MPI_UNDEFINED.

Получение информации о топологии графа, связанной с коммуникатором comm int

MPI_Graphdims_get(MPI_Comm comm, int *nnodes, int *nedges)

 

MPI_GRAPHDIMS_GET(COMM, NNODES, NEDGES, IERR)

Выходные параметры:

  • nnodes - количество вершин графа;
  • nedges - количество ребер графа.

Определение типа топологии (toptype), связанной с коммуникатором comm int

MPI_Topo_test(MPI_Comm comm, int *toptype)

 

MPI_TOPO_TEST(COMM, TOPTYPE, IERR)

Выходной параметр:

  • toptype - тип топологии (значения MPI_CART для декартовой топологии и MPI_GRAPH для топологии графа).



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


Дата добавления: 2014-01-07; Просмотров: 467; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.01 сек.