<div dir="ltr">Hi Pavan,<div><br></div><div style>Thank you for your quick answer. I am trying to understand the blocking behavior of MPI_Wait in the case of non-blocking collectives. Is it safe to assume that, for a non-blocking collective, MPI_Wait is guaranteed to return once all other processes call the corresponding completion operation (e.g. MPI_Wait or MPI_Test)?</div>
<div style><br></div><div style>--Jiri</div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Jun 26, 2013 at 4:00 PM, Pavan Balaji <span dir="ltr"><<a href="mailto:balaji@mcs.anl.gov" target="_blank">balaji@mcs.anl.gov</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hi Jiri,<br>
<br>
The completion of MPI_IBARRIER indicates that all processes have called MPI_IBARRIER.  This part is correct.<br>
<br>
However, the specification does not say that MPI_WAIT on one process has to complete before others have called MPI_WAIT.  That's related to asynchronous progress and is a quality of implementation issue.<br>
<br>
 -- Pavan<div><div class="h5"><br>
<br>
On 06/26/2013 02:54 PM, Jiri Simsa wrote:<br>
</div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
Hi,<br>
<br>
I have a question about the semantics of non-blocking collective<br>
communication. For example, let's consider MPI_Ibarrier. The MPI 3.0<br>
standard specifies that:<br>
<br>
"MPI_IBARRIER is a nonblocking version of MPI_BARRIER. By calling<br>
MPI_IBARRIER, a process notifies that it has reached the barrier. The<br>
call returns immediately, indepen- dent of whether other processes have<br>
called MPI_IBARRIER. The usual barrier semantics are enforced at the<br>
corresponding completion operation (test or wait), which in the intra-<br>
communicator case will complete only after all other processes in the<br>
communicator have called MPI_IBARRIER. In the intercommunicator case, it<br>
will complete when all processes in the remote group have called<br>
MPI_IBARRIER."<br>
<br>
My understanding of the standard is that that MPI_Wait(&request,<br>
&status), where request has been previously passed into MPI_Ibarrier,<br>
returns after all processes in the respective intra-communicator called<br>
MPI_Ibarrier. However, the mpich-3.0.4 library, seems to in some cases<br>
wait for all processes in the respective intra-communicator to call<br>
MPI_Wait. Here is an example that demonstrates this behavior:<br>
<br>
#include <mpi.h><br>
#include <unistd.h><br>
<br>
int main( int argc, char *argv[]) {<br>
   MPI_Request request;<br>
   MPI_Status status;<br>
   MPI_Init(&argc, &argv );<br>
   int myrank;<br>
   MPI_Comm_rank(MPI_COMM_WORLD, &myrank);<br>
   if (myrank == 0) {<br>
     MPI_Ibarrier(MPI_COMM_WORLD, &request);<br>
     MPI_Wait(&request, &status);<br>
     printf("%d, Completed barrier.\n", myrank);<br>
   } else {<br>
     MPI_Ibarrier(MPI_COMM_WORLD, &request);<br>
     sleep(1);<br>
     MPI_Wait(&request, &status);<br>
     printf("%d, Completed barrier.\n", myrank);<br>
   }<br>
   MPI_Finalize();<br>
   return 0;<br>
}<br>
<br>
When executed with "mpiexec -n 2 ./example", I see the expected output<br>
and timing. However, when executed with "mpiexec -n 3 ./example", the<br>
call to MPI_Wait in process 0 returns only after the other processes<br>
wake up from sleep() and call MPI_Wait.<br>
<br>
Isn't this a violation of the standard?<br>
<br>
Best,<br>
<br>
--Jiri Simsa<br>
<br>
<br>
<br></div></div>
______________________________<u></u>_________________<br>
discuss mailing list     <a href="mailto:discuss@mpich.org" target="_blank">discuss@mpich.org</a><br>
To manage subscription options or unsubscribe:<br>
<a href="https://lists.mpich.org/mailman/listinfo/discuss" target="_blank">https://lists.mpich.org/<u></u>mailman/listinfo/discuss</a><br>
<br><span class="HOEnZb"><font color="#888888">
</font></span></blockquote><span class="HOEnZb"><font color="#888888">
<br>
-- <br>
Pavan Balaji<br>
<a href="http://www.mcs.anl.gov/~balaji" target="_blank">http://www.mcs.anl.gov/~balaji</a><br>
</font></span></blockquote></div><br></div>