« Return to documentation listing
Table of Contents
MPI_Dist_graph_create_adjacent  Makes a new communicator to which
topology information has been attached.
#include <mpi.h>
int MPI_Dist_graph_create_adjacent(MPI_Comm comm_old, int indegree, const
int sources[],
const int sourceweights[], int outdegree, const int destinations[], const
int destweights[],
MPI_Info info, int reorder, MPI_Comm *comm_dist_graph)
INCLUDE ’mpif.h’
MPI_DIST_GRAPH_CREATE_ADJACENT(COMM_OLD, INDEGREE, SOURCES, SOURCEWEIGHTS,
OUTDEGREE,
DESTINATIONS, DESTWEIGHTS, INFO, REORDER, COMM_DIST_GRAPH,
IERROR)
INTEGER COMM_OLD, INDEGREE, SOURCES(*), SOURCEWEIGHTS(*), OUTDEGREE, DESTINATIONS(*),
DESTWEIGHTS(*), INFO
INTEGER COMM_DIST_GRAPH, IERROR
LOGICAL REORDER
 comm_old
 Input communicator without topology (handle).
 indegree
 Size of sources and sourceweights arrays (nonnegative integer).
 sources
 Ranks of processes for which the calling process is a destination (array
of nonnegative integers).
 sourceweights
 Weights of the edges into the calling
process (array of nonnegative integers).
 outdegree
 Size of destinations
and destweights arrays (nonnegative integer).
 destinations
 Ranks of processes
for which the calling process is a source (array of nonnegative integers).
 destweights
 Weights of the edges out of the calling process (array of nonnegative
integers).
 Hints on optimization and interpretation of weights (handle).
 reorder
 Ranking may be reordered (true) or not (false) (logical).
 comm_dist_graph
 Communicator with distibuted graph topology added
(handle).
 IERROR
 Fortran only: Error status (integer).
MPI_Dist_graph_create_adjacent
creats a new communicator comm_dist_graph with distrubuted graph topology
and returns a handle to the new communicator. The number of processes in
comm_dist_graph is identical to the number of processes in comm_old. Each
process passes all information about its incoming and outgoing edges in
the virtual distributed graph topology. The calling processes must ensure
that each edge of the graph is described in the source and in the destination
process with the same weights. If there are multiple edges for a given (source,dest)
pair, then the sequence of the weights of these edges does not matter. The
complete communication topology is the combination of all edges shown in
the sources arrays of all processes in comm_old, which must be identical
to the combination of all edges shown in the destinations arrays. Source
and destination ranks must be process ranks of comm_old. This allows a fully
distributed specication of the communication graph. Isolated processes (i.e.,
processes with no outgoing or incoming edges, that is, processes that have
specied indegree and outdegree as zero and thus do not occur as source
or destination rank in the graph specication) are allowed. The call to MPI_Dist_graph_create_adjacent
is collective.
Weights are specied as nonnegative integers and can
be used to influence the process remapping strategy and other internal
MPI optimizations. For instance, approximate count arguments of later communication
calls along specic edges could be used as their edge weights. Multiplicity
of edges can likewise indicate more intense communication between pairs
of processes. However, the exact meaning of edge weights is not specied
by the MPI standard and is left to the implementation. An application can
supply the special value MPI_UNWEIGHTED for the weight array to indicate
that all edges have the same (effectively no) weight. It is erroneous to
supply MPI_UNWEIGHTED for some but not all processes of comm_old. If the
graph is weighted but indegree or outdegree is zero, then MPI_WEIGHTS_EMPTY
or any arbitrary array may be passed to sourceweights or destweights respectively.
Note that MPI_UNWEIGHTED and MPI_WEIGHTS_EMPTY are not special weight values;
rather they are special values for the total array argument. In Fortran,
MPI_UNWEIGHTED and MPI_WEIGHTS_EMPTY are objects like MPI_BOTTOM (not usable
for initialization or assignment). See MPI3 Â§ 2.5.4.
Almost all MPI
routines return an error value; C routines as the value of the function
and Fortran routines in the last argument.
Before the error value is returned,
the current MPI error handler is called. By default, this error handler
aborts the MPI job, except for I/O function errors. The error handler may
be changed with MPI_Comm_set_errhandler; the predefined error handler MPI_ERRORS_RETURN
may be used to cause error values to be returned. Note that MPI does not
guarantee that an MPI program can continue past an error.
MPI_Dist_graph_create
MPI_Dist_graph_neighbors MPI_Dist_graph_neighbors_count
Table of Contents
« Return to documentation listing
