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

Топологические функции низкого уровня

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

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

MPI_CART_MAP(comm, ndims, dims, periods, newrank)

IN comm исходный коммуникатор (дескриптор)
IN ndims размерность декартовой структуры (целое)
IN dims целочисленный массив размером ndims , обозначающий количество процессов в каждом измерении декартовой топологии.
IN periods массив логических элементов размера ndims, обозначающих периодичность по каждому измерению
OUT newrank переупорядоченный номер вызывающего процесса; MPI_UNDEFINED, если вызывающий процесс не принадлежит решетке (целое)

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

MPI_CART_MAP(COMM, NDIMS, DIMS, PERIODS, NEWRANK, IERROR)
INTEGER COMM, NDIMS, DIMS(*), NEWRANK, IERROR
LOGICAL PERIODS(*)

int MPI::Cartcomm::Map(int ndims, const int dims[], const bool periods[]) const

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

Совет разработчикам: Функция MPI_CART_CREATE( comm, ndims, dims, periods,reorder, comm_cart) с reorder = true может быть реализована обращением к MPI_CART_MAP( comm, ndims, dims, периоды, newrank) с последующим вызовом MPI_COMM_SPLIT(comm, color, key,
comm_cart)
, с color = 0, если newrank $ \ne $ MPI_UNDEFINED, и color = MPI_UNDEFINED в противном случае, и key = newrank. Все другие декартовы функции топологии могут быть реализованы локально, используя топологическую информацию, кэшируемую с коммуникатором.[]

Новая функция MPI_GRAPH_MAP для графовых структур представлена ниже:

MPI_GRAPH_MAP(comm, nnodes, index, edges, newrank)

IN comm исходный коммуникатор (дескриптор)
IN nnodes количество вершин графа (целое)
IN index целочисленный массив,описывающий структуру графа, смотри MPI_GRAPH_CREATE
IN edges целочисленный массив, описывающий структуру графа
OUT newrank переупорядоченный номер вызывающего процесса; MPI_UNDEFINED, если процесс не принадлежит графу (целое)

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

MPI_GRAPH_MAP(COMM, NNODES, INDEX, EDGES, NEWRANK, IERROR)
INTEGER COMM, NNODES, INDEX(*), EDGES(*), NEWRANK, IERROR

int MPI::Graphcomm::Map(int nnodes, const int index[],
const int edges[]) const

Совет разработчикам: Функция MPI_CART_CREATE( comm, ndims, dims, periods, reorder,
comm_cart)
с reorder = true может быть реализована обращением к MPI_CART_MAP(comm, ndims, dims, периоды, newrank) с последующим вызовом MPI_COMM_SPLIT(comm, color, key,
comm_cart)
, с color = 0, если newrank = MPI_UNDEFINED, и color = MPI_UNDEFINED в противном случае, и key = newrank.[]


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