Ранги источника (source) сообщения, которое должно быть принято, и адресата dest, который должен получить сообщение для заданного направления сдвига direction и его величины disp, можно определить с помощью подпрограммы MPI_Cart_shift:
int MPI_Cart_shift(MPI_Comm comm, int direction,
int displ, int *source, int *dest)
Для n-мерной декартовой решетки значение аргумента direction должно находиться в пределах от 0 до n—1.
Подпрограмма MPI_Cartdim_get позволяет определить размерность ndims декартовой топологии, связанной с коммуникатором comm:
int MPI_Cartdim_get(MPI_Comm comm, int *ndims)
Подпрограмма MPI_Graph_create создает новый коммуникатор comm_graph, наделенный топологией графа:
int MPI_Graph_create(MPI_Comm comm, int nnodes,
int *index, int *edges, int reorder,
MPI_Comm *comm_graph)
Входные параметры:
· comm —исходный коммуникатор, не наделенный топологией;
· nnodes — количество вершин графа;
· index — целочисленный одномерный массив, содержащий порядок каждого узла (количество связанных с ним ребер – положительная полустепень вершины);
· edges — целочисленный одномерный массив, описывающий ребра графа;
· reorder — значение true разрешает изменение порядка нумерации процессов.
Подпрограмма MPI_Graph_neighbors возвращает соседние с данной вершины графа:
int MPI_Graph_neighbors(MPI_Comm comm, int rank,
int maxneighbors, int *neighbors)
Ее входные параметры:
· comm — коммуникатор с топологией графа;
· rank — ранг процесса в группе коммуникатора comm;
· maxneighbors — размер массива neighbors.
Выходным параметром является массив neighbors, содержащий ранги процессов, соседних с данным.
Количество соседей (nneighbors) узла, связанного с топологией графа, можно определить с помощью подпрограммы MPI_Graph_neighbors_count:
int MPI_Graph_neighbors_count(MPI_Comm comm,
int rank, int *nneighbors)
Входные параметры:
· comm — коммуникатор;
· rank — ранг процесса-узла.
Получить информацию о топологии графа, связанной с коммуникатором comm, можно с помощью подпрограммы MPI_Graph_get:
int MPI_Graph_get(MPI_Comm comm, int maxindex,
int maxedges, int *index, int *edges)
Входными параметрами являются:
· comm — коммуникатор;
· maxindex — длина массива index в вызывающей программе;
· maxedges — длина массива edges в вызывающей программе.
Выходные параметры:
· index — целочисленный массив, содержащий структуру графа (см. описание подпрограммы MPI_Graph_create);
· edges — целочисленный массив, содержащий сведения о ребрах графа.
С помощью подпрограммы MPI_Graph_map можно определить ранг процесса в топологии графа после переупорядочения (newrank):
int MPI_Graph_map(MPI_Comm comm, int nnodes,
int *index, int *edges, int *newrank)
Ее входные параметры:
· comm — коммуникатор;
· nnodes — количество вершин графа;
· index — целочисленный массив, задающий структуру графа (см. описание подпрограммы MPI_Graph_create);
· edges — целочисленный массив, задающий ребра графа.
Если процесс не принадлежит графу, подпрограмма возвращает значение MPI_UNDEFINED.
Подпрограмма MPI_Graphdims_get позволяет получить информацию о топологии графа, связанной с коммуникатором comm:
int MPI_Graphdims_get(MPI_Comm comm,
int *nnodes, int *nedges)
Выходными параметрами этой подпрограммы являются:
· nnodes — количество вершин графа;
· nedges — количество ребер графа.
И, наконец, определить тип топологии (toptype), связанной с коммуникатором comm, можно с помощью подпрограммы MPI_Topo_test:
int MPI_Topo_test(MPI_Comm comm, int *toptype)
Выходным параметром является тип топологии toptype (значения MPI_CART для декартовой топологии и MPI_GRAPH для топологии графа).
Структура сообщения в виде массива однотипных данных, выбираемых из последовательно расположеных в памяти ячеек не всегда удобна. Иногда возникает необходимость в пересылке разнотипных данных, выбираемых из различных участков памяти. В этом случае может оказаться полезным использовать производные типы данных, которые создаются перед их неосредственным использованием. Процесс создания состоит из двух шагов:
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.