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

Int mpi_Graph_create(mpi_Comm comm_old, int nnodes, int *index, int *edges, int reorder, mpi_Comm *comm_graph)

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

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

IN index массив целочисленных значений, описывающий степени вершин

IN edges массив целочисленных значений, описывающий ребра графа

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

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

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

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

Функции запроса топологии графа

Следующие две функции: MPI_Graphdims_get и MPI_Graph_get через коммуникатор возвращают информацию о топологии, которая была создана функцией MPI_Graph_create.

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

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

OUT nnodes число вершин графа (целое, равно числу процессов в группе)

OUT nedges число ребер графа (целое)

Полученные значения массивов index и edges может быть использована для корректного определения размера векторов index и edges в функции MPI_Graph_get.

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

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

IN maxindex длина вектора index (целое)

IN maxedges длина вектора edges (целое)

OUT index целочисленный массив, содержащий структуру графа (подробнее в описании функции MPI_Graph_greate)

OUT edges целочисленный массив, содержащий структуру графа

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

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

IN rank номер процесса в группе comm (целое)

OUT nneighbors номера процессов, являющихся соседними указанному процессу (целочисленный массив)

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

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

IN rank номер процесса в группе comm (целое)

IN maxneighbors размер массива neighbors (целое)

OUT neighbors номера процессов, соседних данному (целочисленный массив)

Функция запроса типа топологии

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