« Return to documentation listing
Table of Contents
#include <mpi.h> int MPI_Graph_neighbors(MPI_Comm comm, int rank, int maxneighbors, int neighbors[])
USE MPI ! or the older form: INCLUDE ’mpif.h’ MPI_GRAPH_NEIGHBORS(COMM, RANK, MAXNEIGHBORS, NEIGHBORS, IERROR) INTEGER COMM, RANK, MAXNEIGHBORS, NEIGHBORS(*), IERROR
USE mpi_f08 MPI_Graph_neighbors(comm, rank, maxneighbors, neighbors, ierror) TYPE(MPI_Comm), INTENT(IN) :: comm INTEGER, INTENT(IN) :: rank, maxneighbors INTEGER, INTENT(OUT) :: neighbors(maxneighbors) INTEGER, OPTIONAL, INTENT(OUT) :: ierror
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)
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.