Provided by: openmpi-doc_1.10.2-8ubuntu1_all bug

NAME

       MPI_Sendrecv_replace - Sends and receives a message using a single buffer.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Sendrecv_replace(void *buf, int count, MPI_Datatype datatype,
            int dest, int sendtag, int source, int recvtag, MPI_Comm comm,
            MPI_Status *status)

Fortran Syntax

       INCLUDE 'mpif.h'
       MPI_SENDRECV_REPLACE(BUF, COUNT, DATATYPE, DEST, SENDTAG, SOURCE,
                 RECVTAG, COMM, STATUS, IERROR)
            <type>    BUF(*)
            INTEGER   COUNT, DATATYPE, DEST, SENDTAG
            INTEGER   SOURCE, RECVTAG, COMM
            INTEGER   STATUS(MPI_STATUS_SIZE), IERROR

C++ Syntax

       #include <mpi.h>
       void Comm::Sendrecv_replace(void* buf, int count, const
            Datatype& datatype, int dest, int sendtag, int source,
            int recvtag, Status& status) const

       void Comm::Sendrecv_replace(void* buf, int count, const
            Datatype& datatype, int dest, int sendtag, int source,
            int recvtag) const

INPUT/OUTPUT PARAMETER

       buf       Initial address of send and receive buffer (choice).

INPUT PARAMETERS

       count     Number of elements in send and receive buffer (integer).

       datatype  Type of elements to send and receive (handle).

       dest      Rank of destination (integer).

       sendtag   Send message tag (integer).

       source    Rank of source (integer).

       recvtag   Receive message tag (integer).

       comm      Communicator (handle).

OUTPUT PARAMETERS

       status    Status object (status).

       IERROR    Fortran only: Error status (integer).

DESCRIPTION

       The  send-receive  operations  combine  in  one  call  the  sending  of  a  message to one
       destination and the receiving of another message, from another process.  The  two  (source
       and destination) are possibly the same. A send-receive operation is useful for executing a
       shift operation across a chain of processes. If blocking sends and receives are  used  for
       such  a shift, then one needs to order the sends and receives correctly (for example, even
       processes send, then receive; odd processes receive first, then send) in order to  prevent
       cyclic  dependencies that may lead to deadlock. When a send-receive operation is used, the
       communication subsystem takes care of these issues. The send-receive operation can be used
       in  conjunction  with  the  functions described in Chapter 6 of the MPI Standard, "Process
       Topologies," in order to perform shifts on  various  logical  topologies.  Also,  a  send-
       receive operation is useful for implementing remote procedure calls.

       A  message sent by a send-receive operation can be received by a regular receive operation
       or probed by a probe operation; a send-receive operation can receive a message sent  by  a
       regular send operation.

       MPI_Sendrecv_replace  executes  a  blocking send and receive. The same buffer is used both
       for the send and for the receive, so that the message sent  is  replaced  by  the  message
       received.

       The  semantics  of a send-receive operation is what would be obtained if the caller forked
       two concurrent threads, one to execute the send, and one to execute the receive,  followed
       by a join of these two threads.

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_Sendrecv