mpi_graph_neighbors(3)
NAME
MPI_Graph_neighbors - Returns the neighbors of a node associated with
a graph topology.
SYNTAX
C Syntax
- #include <mpi.h>
int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, - int *neighbors)
Fortran Syntax
- INCLUDE 'mpif.h'
MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR) - INTEGER COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR
C++ Syntax
- #include <mpi.h>
void Graphcomm::Get_neighbors(int rank, int maxneighbors, - int neighbors[]) const
INPUT PARAMETERS
comm Communicator with graph topology (handle).
rank Rank of process in group of comm (integer).
- maxneighbors
- Size of array neighbors (integer).
OUTPUT PARAMETERS
- neighbors Ranks of processes that are neighbors to specified process
- (array of integers).
- IERROR Fortran only: Error status (integer).
DESCRIPTION
- Example: Suppose that comm is a communicator with a shuffle-exchange
topology. The group has 2n members. Each process is labeled by
a(1), ..., a(n) with a(i) E{0,1}, and has three neighbors: exchange
(a(1), ..., a(n) = a(1), ..., a(n-1), a(n) (a = 1 - a), shuffle
(a(1), ..., a(n)) = a(2), ..., a(n), a(1), and unshuffle (a(1), ...,
a(n)) = a(n), a(1), ..., a(n-1). The graph adjacency list is illustrated below for n=3.
- exchange shuffle unshuffle
- node neighbors(1) neighbors(2) neighbors(3)
0(000) 1 0 0
1(001) 0 2 4
2(010) 3 4 1
3(011) 2 6 5
4(100) 5 1 2
5(101) 4 3 6
6(110) 7 5 3
7(111) 6 7 7 - Suppose that the communicator comm has this topology associated with it. The following code fragment cycles through the three types of neighbors and performs an appropriate permutation for each.
- C assume: each process has stored a real number A.
C extract neighborhood information - CALL MPI_COMM_RANK(comm, myrank, ierr)
CALL MPI_GRAPH_NEIGHBORS(comm, myrank, 3, neighbors, ierr) - C perform exchange permutation
- CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(1), 0,
- + neighbors(1), 0, comm, status, ierr)
- C perform shuffle permutation
- CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(2), 0,
- + neighbors(3), 0, comm, status, ierr)
- C perform unshuffle permutation
- CALL MPI_SENDRECV_REPLACE(A, 1, MPI_REAL, neighbors(3), 0,
- + neighbors(2), 0, comm, status, ierr)
ERRORS
Almost all MPI routines return an error value; C routines as the value
of the function and Fortran routines in the last argument. C++ functions do not return errors. If the default error handler is set to
MPI::ERRORS_THROW_EXCEPTIONS, then on error the C++ exception mechanism
will be used to throw an MPI:Exception object.
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.
SEE ALSO
- MPI_Graph_neighbors_count