Open MPI logo

MPI_Sendrecv(3) man page (version 1.3.4)

  |   Home   |   Support   |   FAQ   |  

« Return to documentation listing



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).

DESCRIPTION

       The send-receive operations combine in one call the sending of  a  mes-
       sage  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 opera-
       tion 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  pro-
       cesses  receive  first, then send) in order to prevent cyclic dependen-
       cies 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 opera-
       tion 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 differ-
       ent 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++ func-
       tions 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

1.3.4                            Nov 11, 2009                  MPI_Sendrecv(3)

« Return to documentation listing