| 
          
  « Return to documentation listing 
     
Table of Contents
 
MPI_Graph_neighbors  - Returns the neighbors of a node associated
with a graph topology.
 
 
#include <mpi.h>
int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors,
    int neighbors[])
 
 
INCLUDE ’mpif.h’
MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR)
    INTEGER    COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR
 
 
#include <mpi.h>
void Graphcomm::Get_neighbors(int rank, int maxneighbors,
    int neighbors[]) const
 
- comm 
 
- Communicator with graph topology (handle). 
 
- rank 
 
- Rank
of process in group of comm (integer). 
 
- maxneighbors 
 
- Size of array neighbors
(integer).
   
 
- neighbors 
 
- Ranks of processes that are neighbors
to specified process (array of integers). 
 
- IERROR 
 
- Fortran only: Error status
(integer).
   
 
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)
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.
 
 
MPI_Graph_neighbors_count
   
 
 
Table of Contents 
 
 « Return to documentation listing 
	  
	   |