Manual Pages for UNIX Darwin command on man MPI_Probe
MyWebUniversity

Manual Pages for UNIX Darwin command on man MPI_Probe

MPIProbe(3OpenMPI) MPIProbe(3OpenMPI)

NAME

MMPPIIPPrroobbee - Blocking test for a message.

SSYYNNTTAAXX CC SSyynnttaaxx

#include

int MPIProbe(int source, int tag, MPIComm comm, MPIStatus *status) FFoorrttrraann SSyynnttaaxx INCLUDE 'mpif.h'

MPIPROBE(SOURCE, TAG, COMM, STATUS, IERROR)

INTEGER SOURCE, TAG, COMM, STATUS(MPISTATUSSIZE), IERROR

CC++++ SSyynnttaaxx

#include

void Comm::Probe(int source, int tag, Status& status) const void Comm::Probe(int source, int tag) const IINNPPUUTT PPAARRAAMMEETTEERRSS source Source rank or MPIANYSOURCE (integer). tag Tag value or MPIANYTAG (integer). comm Communicator (handle). OOUUTTPPUUTT PPAARRAAMMEETTEERRSS status Status object (status).

IERROR Fortran only: Error status (integer).

DESCRIPTION

The MPIProbe and MPIIprobe operations allow checking of incoming mes-

sages, without actual receipt of them. The user can then decide how to receive them, based on the information returned by the probe in the status variable. For example, the user may allocate memory for the receive buffer, according to the length of the probed message. MPIProbe behaves like MPIIprobe except that it is a blocking call that returns only after a matching message has been found. If your application does not need to examine the status field, you can save resources by using the predefined constant MPISTATUSIGNORE as a special value for the status argument. The semantics of MPIProbe and MPIIprobe guarantee progress: If a call to MPIProbe has been issued by a process, and a send that matches the probe has been initiated by some process, then the call to MPIProbe will return, unless the message is received by another concurrent receive operation (that is executed by another thread at the probing process). Similarly, if a process busy waits with MPIIprobe and a matching message has been issued, then the call to MPIIprobe will eventually return flag = true unless the message is received by another concurrent receive operation. EExxaammppllee 11:: Use blocking probe to wait for an incoming message. CALL MPICOMMRANK(comm, rank, ierr) IF (rank.EQ.0) THEN CALL MPISEND(i, 1, MPIINTEGER, 2, 0, comm, ierr) ELSE IF(rank.EQ.1) THEN CALL MPISEND(x, 1, MPIREAL, 2, 0, comm, ierr) ELSE ! rank.EQ.2 DO i=1, 2 CALL MPIPROBE(MPIANYSOURCE, 0, comm, status, ierr) IF (status(MPISOURCE) = 0) THEN 100 CALL MPIRECV(i, 1, MPIINTEGER, 0, 0, status, ierr) ELSE 200 CALL MPIRECV(x, 1, MPIREAL, 1, 0, status, ierr) END IF END DO END IF Each message is received with the right type.

EExxaammppllee 22:: A program similar to the previous example, but with a prob-

lem. CALL MPICOMMRANK(comm, rank, ierr) IF (rank.EQ.0) THEN CALL MPISEND(i, 1, MPIINTEGER, 2, 0, comm, ierr) ELSE IF(rank.EQ.1) THEN CALL MPISEND(x, 1, MPIREAL, 2, 0, comm, ierr) ELSE DO i=1, 2 CALL MPIPROBE(MPIANYSOURCE, 0, comm, status, ierr) IF (status(MPISOURCE) = 0) THEN 100 CALL MPIRECV(i, 1, MPIINTEGER, MPIANYSOURCE, 0, status, ierr) ELSE 200 CALL MPIRECV(x, 1, MPIREAL, MPIANYSOURCE, 0, status, ierr) END IF END DO END IF We slightly modified Example 2, using MPIANYSOURCE as the source argument in the two receive calls in statements labeled 100 and 200.

The program is now incorrect: The receive operation may receive a mes-

sage that is distinct from the message probed by the preceding call to MPIProbe. EERRRROORRSS 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::ERRORSTHROWEXCEPTIONS, 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

MPICommseterrhandler; the predefined error handler MPIERRORSRETURN

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

MPIIprobe MPICancel Open MPI 1.2 September 2006 MPIProbe(3OpenMPI)




Contact us      |      About us      |      Term of use      |       Copyright © 2000-2019 MyWebUniversity.com ™