232 lines
7.3 KiB
Groff
232 lines
7.3 KiB
Groff
.\" Man page generated from reStructuredText.
|
|
.
|
|
.TH "MPI_GRAPH_CREATE" "3" "Feb 14, 2025" "" "Open MPI"
|
|
.
|
|
.nr rst2man-indent-level 0
|
|
.
|
|
.de1 rstReportMargin
|
|
\\$1 \\n[an-margin]
|
|
level \\n[rst2man-indent-level]
|
|
level margin: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
-
|
|
\\n[rst2man-indent0]
|
|
\\n[rst2man-indent1]
|
|
\\n[rst2man-indent2]
|
|
..
|
|
.de1 INDENT
|
|
.\" .rstReportMargin pre:
|
|
. RS \\$1
|
|
. nr rst2man-indent\\n[rst2man-indent-level] \\n[an-margin]
|
|
. nr rst2man-indent-level +1
|
|
.\" .rstReportMargin post:
|
|
..
|
|
.de UNINDENT
|
|
. RE
|
|
.\" indent \\n[an-margin]
|
|
.\" old: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.nr rst2man-indent-level -1
|
|
.\" new: \\n[rst2man-indent\\n[rst2man-indent-level]]
|
|
.in \\n[rst2man-indent\\n[rst2man-indent-level]]u
|
|
..
|
|
.sp
|
|
\fI\%MPI_Graph_create\fP — Makes a new communicator to which topology
|
|
information has been attached.
|
|
.SH SYNTAX
|
|
.SS C Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
#include <mpi.h>
|
|
|
|
int MPI_Graph_create(MPI_Comm comm_old, int nnodes, const int index[],
|
|
const int edges[], int reorder, MPI_Comm *comm_graph)
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE MPI
|
|
! or the older form: INCLUDE \(aqmpif.h\(aq
|
|
|
|
MPI_GRAPH_CREATE(COMM_OLD, NNODES, INDEX, EDGES, REORDER,
|
|
COMM_GRAPH, IERROR)
|
|
INTEGER COMM_OLD, NNODES, INDEX(*), EDGES(*)
|
|
INTEGER COMM_GRAPH, IERROR
|
|
LOGICAL REORDER
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SS Fortran 2008 Syntax
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
.sp
|
|
.nf
|
|
.ft C
|
|
USE mpi_f08
|
|
|
|
MPI_Graph_create(comm_old, nnodes, index, edges, reorder, comm_graph,
|
|
ierror)
|
|
TYPE(MPI_Comm), INTENT(IN) :: comm_old
|
|
INTEGER, INTENT(IN) :: nnodes, index(nnodes), edges(*)
|
|
LOGICAL, INTENT(IN) :: reorder
|
|
TYPE(MPI_Comm), INTENT(OUT) :: comm_graph
|
|
INTEGER, OPTIONAL, INTENT(OUT) :: ierror
|
|
.ft P
|
|
.fi
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH INPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBcomm_old\fP : Input communicator without topology (handle).
|
|
.IP \(bu 2
|
|
\fBnnodes\fP : Number of nodes in graph (integer).
|
|
.IP \(bu 2
|
|
\fBindex\fP : Array of integers describing node degrees (see below).
|
|
.IP \(bu 2
|
|
\fBedges\fP : Array of integers describing graph edges (see below).
|
|
.IP \(bu 2
|
|
\fBreorder\fP : Ranking may be reordered (true) or not (false) (logical).
|
|
.UNINDENT
|
|
.SH OUTPUT PARAMETERS
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBcomm_graph\fP : Communicator with graph topology added (handle).
|
|
.IP \(bu 2
|
|
\fBierror\fP : Fortran only: Error status (integer).
|
|
.UNINDENT
|
|
.SH DESCRIPTION
|
|
.sp
|
|
\fI\%MPI_Graph_create\fP returns a handle to a new communicator to which the
|
|
graph topology information is attached. If reorder = false then the rank
|
|
of each process in the new group is identical to its rank in the old
|
|
group. Otherwise, the function may reorder the processes. If the size,
|
|
nnodes, of the graph is smaller than the size of the group of comm_old,
|
|
then some processes are returned MPI_COMM_NULL, in analogy to
|
|
\fI\%MPI_Cart_create\fP and \fI\%MPI_Comm_split\fP\&. The call is erroneous if it
|
|
specifies a graph that is larger than the group size of the input
|
|
communicator.
|
|
.sp
|
|
The three parameters nnodes, index, and edges define the graph
|
|
structure. nnodes is the number of nodes of the graph. The nodes are
|
|
numbered from 0 to nnodes\-1. The ith entry of array index stores the
|
|
total number of neighbors of the first i graph nodes. The lists of
|
|
neighbors of nodes 0, 1, …, nnodes\-1 are stored in consecutive
|
|
locations in array edges. The array edges is a flattened representation
|
|
of the edge lists. The total number of entries in index is nnodes and
|
|
the total number of entries in edges is equal to the number of graph
|
|
edges.
|
|
.sp
|
|
The definitions of the arguments nnodes, index, and edges are
|
|
illustrated with the following simple example.
|
|
.sp
|
|
Example: Assume there are four processes 0, 1, 2, 3 with the following
|
|
adjacency matrix:
|
|
.sp
|
|
——\- ———
|
|
Process Neighbors
|
|
——\- ———
|
|
0 1, 3
|
|
1 0
|
|
2 3
|
|
3 0, 2
|
|
——\- ———
|
|
.sp
|
|
Then, the input arguments are:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
nodes = 4
|
|
.IP \(bu 2
|
|
index = 2, 3, 4, 6
|
|
.IP \(bu 2
|
|
edges = 1, 3, 0, 3, 0, 2
|
|
.UNINDENT
|
|
.sp
|
|
Thus, in C, index[0] is the degree of node zero, and index[i] \-
|
|
index[i\-1] is the degree of node i, i=1, … , nnodes\-1; the list of
|
|
neighbors of node zero is stored in edges[j], for 0 <= j <= index[0] \- 1
|
|
and the list of neighbors of node i, i > 0 , is stored in edges[j],
|
|
index[i\-1] <= j <= index[i] \- 1.
|
|
.sp
|
|
In Fortran, index(1) is the degree of node zero, and index(i+1) \-
|
|
index(i) is the degree of node i, i=1, … , nnodes\-1; the list of
|
|
neighbors of node zero is stored in edges(j), for 1 <= j <= index(1) and
|
|
the list of neighbors of node i, i > 0, is stored in edges(j), index(i)
|
|
+ 1 <= j <= index(i + 1).
|
|
.SH ERRORS
|
|
.sp
|
|
Almost all MPI routines return an error value; C routines as the return result
|
|
of the function and Fortran routines in the last argument.
|
|
.sp
|
|
Before the error value is returned, the current MPI error handler associated
|
|
with the communication object (e.g., communicator, window, file) is called.
|
|
If no communication object is associated with the MPI call, then the call is
|
|
considered attached to MPI_COMM_SELF and will call the associated MPI error
|
|
handler. When MPI_COMM_SELF is not initialized (i.e., before
|
|
\fI\%MPI_Init\fP/\fI\%MPI_Init_thread\fP, after \fI\%MPI_Finalize\fP, or when using the Sessions
|
|
Model exclusively) the error raises the initial error handler. The initial
|
|
error handler can be changed by calling \fI\%MPI_Comm_set_errhandler\fP on
|
|
MPI_COMM_SELF when using the World model, or the mpi_initial_errhandler CLI
|
|
argument to mpiexec or info key to \fI\%MPI_Comm_spawn\fP/\fI\%MPI_Comm_spawn_multiple\fP\&.
|
|
If no other appropriate error handler has been set, then the MPI_ERRORS_RETURN
|
|
error handler is called for MPI I/O functions and the MPI_ERRORS_ABORT error
|
|
handler is called for all other MPI functions.
|
|
.sp
|
|
Open MPI includes three predefined error handlers that can be used:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ARE_FATAL\fP
|
|
Causes the program to abort all connected MPI processes.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_ABORT\fP
|
|
An error handler that can be invoked on a communicator,
|
|
window, file, or session. When called on a communicator, it
|
|
acts as if \fI\%MPI_Abort\fP was called on that communicator. If
|
|
called on a window or file, acts as if \fI\%MPI_Abort\fP was called
|
|
on a communicator containing the group of processes in the
|
|
corresponding window or file. If called on a session,
|
|
aborts only the local process.
|
|
.IP \(bu 2
|
|
\fBMPI_ERRORS_RETURN\fP
|
|
Returns an error code to the application.
|
|
.UNINDENT
|
|
.sp
|
|
MPI applications can also implement their own error handlers by calling:
|
|
.INDENT 0.0
|
|
.IP \(bu 2
|
|
\fI\%MPI_Comm_create_errhandler\fP then \fI\%MPI_Comm_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_File_create_errhandler\fP then \fI\%MPI_File_set_errhandler\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Session_create_errhandler\fP then \fI\%MPI_Session_set_errhandler\fP or at \fI\%MPI_Session_init\fP
|
|
.IP \(bu 2
|
|
\fI\%MPI_Win_create_errhandler\fP then \fI\%MPI_Win_set_errhandler\fP
|
|
.UNINDENT
|
|
.sp
|
|
Note that MPI does not guarantee that an MPI program can continue past
|
|
an error.
|
|
.sp
|
|
See the \fI\%MPI man page\fP for a full list of \fI\%MPI error codes\fP\&.
|
|
.sp
|
|
See the Error Handling section of the MPI\-3.1 standard for
|
|
more information.
|
|
.sp
|
|
\fBSEE ALSO:\fP
|
|
.INDENT 0.0
|
|
.INDENT 3.5
|
|
\fI\%MPI_Graph_get\fP
|
|
.UNINDENT
|
|
.UNINDENT
|
|
.SH COPYRIGHT
|
|
2003-2025, The Open MPI Community
|
|
.\" Generated by docutils manpage writer.
|
|
.
|