Для выполнения всех других функций топологии могут использоваться две дополнительные функции, представленные в этом разделе. В общем случае они не вызываются пользователем, пока ему хватает обычных возможностей 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 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.[]