ADC Home > Reference Library > Reference > Mac OS X > Mac OS X Man Pages

 

This document is a Mac OS X manual page. Manual pages are a command-line technology for providing documentation. You can view these manual pages locally using the man(1) command. These manual pages come from many different sources, and thus, have a variety of writing styles.

For more information about the manual page format, see the manual page for manpages(5).



MPI_Request_free(3OpenMPI)                                                        MPI_Request_free(3OpenMPI)



NAME
       MPI_Request_free - Frees a communication request object.


SYNTAX
C Syntax
       #include <mpi.h>
       int MPI_Request_free(MPI_Request *request)


Fortran Syntax
       INCLUDE 'mpif.h'
       MPI_REQUEST_FREE(REQUEST, IERROR)
            INTEGER   REQUEST, IERROR


C++ Syntax
       #include <mpi.h>
       void Request::Free()


INPUT/OUTPUT PARAMETER
       request         Communication request (handle).


DESCRIPTION
       This  operation allows a request object to be deallocated without waiting for the associated communi-cation communication
       cation to complete.

       MPI_Request_free marks the request object for deallocation and sets request to MPI_REQUEST_NULL.  Any
       ongoing  communication  that  is associated with the request will be allowed to complete. The request
       will be deallocated only after its completion.


NOTES
       Once a request is freed by a call to MPI_Request_free, it is not possible to check for the successful
       completion  of  the  associated  communication  with calls to MPI_Wait or MPI_Test. Also, if an error
       occurs subsequently during the communication, an error code cannot be returned to the user -- such an
       error  must  be  treated  as fatal. Questions arise as to how one knows when the operations have com-pleted completed
       pleted when using MPI_Request_free. Depending on the program logic, there may be other ways in  which
       the  program  knows  that  certain operations have completed and this makes usage of MPI_Request_free
       practical. For example, an active send request could be freed when the logic of the program  is  such
       that  the  receiver  sends a reply to the message sent -- the arrival of the reply informs the sender
       that the send has completed and the send buffer can be reused. An active receive request should never
       be  freed,  as the receiver will have no way to verify that the receive has completed and the receive
       buffer can be reused.


       Example:

           CALL MPI_COMM_RANK(MPI_COMM_WORLD, rank)
           IF(rank.EQ.0) THEN
               DO i=1, n
                 CALL MPI_ISEND(outval, 1, MPI_REAL, 1, 0, req, ierr)
                 CALL MPI_REQUEST_FREE(req, ierr)
                 CALL MPI_IRECV(inval, 1, MPI_REAL, 1, 0, req, ierr)
                 CALL MPI_WAIT(req, status, ierr)
               END DO
           ELSE    ! rank.EQ.1
               CALL MPI_IRECV(inval, 1, MPI_REAL, 0, 0, req, ierr)
               CALL MPI_WAIT(req, status)
               DO I=1, n-1
                  CALL MPI_ISEND(outval, 1, MPI_REAL, 0, 0, req, ierr)
                  CALL MPI_REQUEST_FREE(req, ierr)
                  CALL MPI_IRECV(inval, 1, MPI_REAL, 0, 0, req, ierr)
                  CALL MPI_WAIT(req, status, ierr)
               END DO
               CALL MPI_ISEND(outval, 1, MPI_REAL, 0, 0, req, ierr)
               CALL MPI_WAIT(req, status)
           END IF

       This routine is normally used to free  persistent  requests  created  with  either  MPI_Recv_init  or
       MPI_Send_init  and  friends.   However,  it  can  be used to free a request created with MPI_Irecv or
       MPI_Isend and friends; in that case the use can not use the test/wait routines on the request.

       It is permitted to free an active request.  However, once freed, you can not use  the  request  in  a
       wait or test routine (e.g., MPI_Wait ).


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_Isend
       MPI_Irecv
       MPI_Issend
       MPI_Ibsend
       MPI_Irsend
       MPI_Recv_init
       MPI_Send_init
       MPI_Ssend_init
       MPI_Rsend_init
       MPI_Test
       MPI_Wait
       MPI_Waitall
       MPI_Waitany
       MPI_Waitsome
       MPI_Testall
       MPI_Testany
       MPI_Testsome






Open MPI 1.2                                   September 2006                     MPI_Request_free(3OpenMPI)

Did this document help you?
Yes: Tell us what works for you.
It’s good, but: Report typos, inaccuracies, and so forth.
It wasn’t helpful: Tell us what would have helped.