Provided by: openmpi-doc_1.6.5-8_all bug

NAME

       MPI_Sendrecv - Sends and receives a message.

SYNTAX

C Syntax

       #include <mpi.h>
       int MPI_Sendrecv(void *sendbuf, int sendcount, MPI_Datatype sendtype,
            int dest, int sendtag, void *recvbuf, int recvcount,
            MPI_Datatype recvtype, int source, int recvtag,
            MPI_Comm comm, MPI_Status *status)

Fortran Syntax

       INCLUDE 'mpif.h'
       MPI_SENDRECV(SENDBUF, SENDCOUNT, SENDTYPE, DEST, SENDTAG,
                 RECVBUF, RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM,
                 STATUS, IERROR)
            <type>    SENDBUF(*), RECVBUF(*)
            INTEGER   SENDCOUNT, SENDTYPE, DEST, SENDTAG
            INTEGER   RECVCOUNT, RECVTYPE, SOURCE, RECVTAG, COMM
            INTEGER   STATUS(MPI_STATUS_SIZE), IERROR

C++ Syntax

       #include <mpi.h>
       void Comm::Sendrecv(const void *sendbuf, int sendcount, const
            Datatype& sendtype, int dest, int sendtag, void *recvbuf,
            int recvcount, const Datatype& recvtype, int source,
            int recvtag, Status& status) const

       void Comm::Sendrecv(const void *sendbuf, int sendcount, const
            Datatype& sendtype, int dest, int sendtag, void *recvbuf,
            int recvcount, const Datatype& recvtype, int source,
            int recvtag) const

INPUT PARAMETERS

       sendbuf   Initial address of send buffer (choice).

       sendcount Number of elements to send (integer).

       sendtype  Type of elements in send buffer (handle).

       dest      Rank of destination (integer).

       sendtag   Send tag (integer).

       recvcount Maximum number of elements to receive (integer).

       recvtype  Type of elements in receive buffer (handle).

       source    Rank of source (integer).

       recvtag   Receive tag (integer).

       comm      Communicator (handle).

OUTPUT PARAMETERS

       recvbuf   Initial address of receive buffer (choice).

       status    Status object (status). This refers to the receive operation.

       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-1  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  executes  a  blocking  send  and  receive  operation.  Both  send  and receive use the same
       communicator, but possibly different tags. The send buffer and receive buffers must be disjoint, and  may
       have different lengths and datatypes.

       If  your  application  does  not  need  to  examine the status field, you can save resources by using the
       predefined constant MPI_STATUS_IGNORE as a special value for the status argument.

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_replace