next up previous contents
Next: Топологические функции запроса Up: Топологические конструкторы Previous: Декартова функция MPI_DIMS_CREATE   Contents

Конструктор универсальной (графовой) топологии

Синтаксис функции MPI_GRAPH_CREATE представлен ниже.

MPI_GRAPH_CREATE(comm_old, nnodes, index, edges, reorder, comm_graph)

IN comm_old входной коммуникатор (дескриптор)
IN nnodes количество узлов графа (целое)
IN index массив целочисленных значений, описывающий степени вершин (смотри ниже)
IN edges массив целочисленных значений, описывающий ребра графа (смотри ниже)
IN reorder номера могут быть переупорядочены (true) или нет (false)
OUT comm_graph построенный коммуникатор с графовой топологией (дескриптор)

int MPI_Graph_create(MPI_Comm comm_old, int nnodes,
int *index, int *edges, int reorder, MPI_Comm *comm_graph)

MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX,
EDGES, REORDER, COMM_GRAPH, IERROR)
INTEGER COMM_OLD, NNODES, INDEX(*), EDGES(*), COMM_GRAPH, IERROR
LOGICAL REORDER

Graphcomm Intracomm::Create_graph(int nnodes,
const int index[], const int edges[], bool reorder) const

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

Структуру графа определяют три параметра nnodes, index и edges. nnodes - число узлов графа, узлы маркируются от 0 до nnodes-1. i-ый элемент массива index хранит общее число соседей первых i вершин графа. Списки соседей вершин 0, 1, ..., nnodes-1 хранятся в последовательности ячеек массива edges. Общее число элементов в index есть nnodes, а общее число элементов в edges равно числу ребер графа.

Определения аргументов nnodes, index, и edges иллюстрируются следующим простым примером.

Пример 6.2. Пусть имеются четыре процесса 0, 1, 2, 3 со следующей матрицей смежности:

process neighbors
0 1, 3
1 0
2 3
3 0, 2

Тогда исходными аргументами являются:

nnodes =
4
index =
2, 3, 4, 6
еdges =
1, 3, 0, 3, 0, 2

Таким образом в языке Си index[0] есть степень вершины нуль, а index [i] - index[i-1] есть степень вершины i, i = 1, ..., nnodes-1; список соседей узла нуль хранится в edges[j], где $0 \leq, j \leq index[0] - 1$, a список соседей верщины i, i > 0 хранится в edges[j], где index[i-1] $ \leq j \leq index[i] - 1$.

В языке ФОРТРАН index (1) есть степень вершины нуль, а index (i+1) - index(i) есть степень вершины i, i = 1, ..., nnodes-1; список соседей вершины нуль хранится в edges(j), где 1 $ \leq $ j $ \leq $ index(1), а список соседей вершины i, i> 0 хранится в edges(j), где index(i) + 1 $ \leq $ j $ \leq $ index(i +1).

Совет разработчикам: С коммуникатором в общем случае должна храниться следующая топологическая информация:

Для графовой структуры число вершин равно числу процессов в группе. Следовательно, число вершин не обязательно хранить явно. Дополнительный нулевой элемент в начале массива index упрощает доступ к топологической информации.[]


next up previous contents
Next: Топологические функции запроса Up: Топологические конструкторы Previous: Декартова функция MPI_DIMS_CREATE   Contents
Alex Otwagin 2002-12-10