<font size=2 face="sans-serif">I'm pretty sure the intent was that MPI_Recv
should NOT return MPI_ERR_PENDING as there is no request on which the error
can be pending, but I don't know if much thought was given to allowing
MPI_Recv to ignore acknowledge ranks.</font>
<br><font size=2 face="sans-serif">Dave</font>
<br>
<br>
<br>
<br><font size=1 color=#5f5f5f face="sans-serif">From:      
 </font><font size=1 face="sans-serif">Wesley Bland <wbland@icl.utk.edu></font>
<br><font size=1 color=#5f5f5f face="sans-serif">To:      
 </font><font size=1 face="sans-serif">"MPI 3.0 Fault
Tolerance and Dynamic Process Control working Group" <mpi3-ft@lists.mpi-forum.org>,
</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Date:      
 </font><font size=1 face="sans-serif">03/15/2013 12:45 PM</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Subject:    
   </font><font size=1 face="sans-serif">Re: [Mpi3-ft]
MPI_Recv + MPI_Comm_failure_ack</font>
<br><font size=1 color=#5f5f5f face="sans-serif">Sent by:    
   </font><font size=1 face="sans-serif">mpi3-ft-bounces@lists.mpi-forum.org</font>
<br>
<hr noshade>
<br>
<br>
<br><font size=3>I think you are correct in your evaluation, though I also
think that wasn't our intent. I think the intent (unless I'm forgetting
a discussion) was to allow MPI_ERR_PENDING to be returned by MPI_RECV and
let MPI_COMM_FAILURE_ACK cover both cases. Can anyone else confirm that
this was the goal.</font>
<br>
<br><font size=3>If that's the case, it's something we'll need to fix in
the text.</font>
<br>
<br><font size=3>Thanks,</font>
<br><font size=3>Wesley</font>
<br><font size=3><br>
</font>
<br><font size=3>On Fri, Mar 15, 2013 at 12:32 PM, David Solt <</font><a href=mailto:dsolt@us.ibm.com target=_blank><font size=3 color=blue><u>dsolt@us.ibm.com</u></font></a><font size=3>>
wrote:</font>
<br><font size=3 face="sans-serif">Based on the proposal:</font><font size=3>
<br>
</font><font size=3 face="sans-serif"><br>
MPI_Comm_failure_ack(blah, blah)</font><font size=3> <br>
</font><font size=3 face="CMR10"><br>
This local operation gives the users a way to </font><font size=3 face="CMTI10">acknowledge
</font><font size=3 face="CMR10">all locally noticed failures on</font><font size=3>
</font><font size=3 face="CMSS10"><br>
comm</font><font size=3 face="CMR10">. After the call, unmatched </font><font size=3 face="CMSS10">MPI</font><font size=3 face="CMTT10">_</font><font size=3 face="CMSS10">ANY</font><font size=3 face="CMTT10">_</font><font size=3 face="CMSS10">SOURCE
</font><font size=3 face="CMR10">receptions that would have raised an</font><font size=3>
</font><font size=3 face="CMR10"><br>
error code </font><font size=3 face="CMSS10">MPI</font><font size=3 face="CMTT10">_</font><font size=3 face="CMSS10">ERR</font><font size=3 face="CMTT10">_</font><font size=3 face="CMSS10">PENDING
</font><font size=3 face="CMR10">due to process failure (see Section </font><font size=3 color=blue face="CMR10">17.2.2</font><font size=3 face="CMR10">)
proceed without</font><font size=3> </font><font size=3 face="CMR10"><br>
further reporting of errors due to those acknowledged failures.</font><font size=3>
<br>
</font><font size=3 face="CMR10"><br>
I think this clearly indicates that MPI_Recv is uninfluenced by calls to
MPI_Comm_failure_ack.  Therefore, there is no way to call MPI_Recv(MPI_ANY_SOURCE)
and ignore failures reported by MPI_Comm_failure_ack.   </font><font size=3><br>
</font><font size=3 face="CMR10"><br>
I believe the following code will NOT work (i.e. after the first failure,
the MPI_Recv will continuously fail):</font><font size=3> <br>
<br>
</font><font size=3 face="CMR10"><br>
MPI_Comm_size(intercomm, &size);</font><font size=3> </font><font size=3 face="CMR10"><br>
while (failures < size) {</font><font size=3> </font><font size=3 face="CMR10"><br>
        err = MPI_Recv(blah, blah, MPI_ANY_SOURCE,
intercomm, &status);</font><font size=3> </font><font size=3 face="CMR10"><br>
        if (err == MPI_PROC_FAILED) {</font><font size=3>
</font><font size=3 face="CMR10"><br>
                MPI_Comm_failure_ack(intercomm);</font><font size=3>
</font><font size=3 face="CMR10"><br>
                MPI_Comm_failure_get_acked(intercomm,
&group);</font><font size=3> </font><font size=3 face="CMR10"><br>
                MPI_Group_size(group,
&failures);</font><font size=3> </font><font size=3 face="CMR10"><br>
        } else {</font><font size=3> </font><font size=3 face="CMR10"><br>
                /* process received
data */</font><font size=3> </font><font size=3 face="CMR10"><br>
        }</font><font size=3> </font><font size=3 face="CMR10"><br>
}</font><font size=3> <br>
</font><font size=3 face="CMR10"><br>
and has to be written as:</font><font size=3> <br>
</font><font size=3 face="CMR10"><br>
MPI_Comm_size(intercomm, &size);</font><font size=3> </font><font size=3 face="CMR10"><br>
while (failures < size) {</font><font size=3> <br>
</font><font size=3 face="CMR10"><br>
        if (request == MPI_REQUEST_NULL) {</font><font size=3>
</font><font size=3 face="CMR10"><br>
                err = MPI_Irecv(blah,
blah, MPI_ANY_SOURCE, intercomm, &request);</font><font size=3> </font><font size=3 face="CMR10"><br>
        }</font><font size=3> </font><font size=3 face="CMR10"><br>
        err = MPI_Wait(&request, &status);</font><font size=3>
<br>
</font><font size=3 face="CMR10"><br>
        if (err == MPI_ERR_PENDING) {</font><font size=3>
</font><font size=3 face="CMR10"><br>
                MPI_Comm_failure_ack(intercomm);</font><font size=3>
</font><font size=3 face="CMR10"><br>
                MPI_Comm_failure_get_acked(intercomm,
&group);</font><font size=3> </font><font size=3 face="CMR10"><br>
                MPI_Group_size(group,
&failures);</font><font size=3> </font><font size=3 face="CMR10"><br>
        } else {</font><font size=3> </font><font size=3 face="CMR10"><br>
                /* process received
data */</font><font size=3> </font><font size=3 face="CMR10"><br>
        }</font><font size=3> </font><font size=3 face="CMR10"><br>
}</font><font size=3> <br>
</font><font size=3 face="CMR10"><br>
Am I correct in my thinking?</font><font size=3> </font><font size=3 face="CMR10"><br>
If so, was there a reason why MPI_Recv could not also "obey"
MPI_Comm_failure_ack calls? </font><font size=3><br>
</font><font size=3 face="CMR10"><br>
Thanks,</font><font size=3> </font><font size=3 face="CMR10"><br>
Dave</font><font size=3><br>
_______________________________________________<br>
mpi3-ft mailing list</font><font size=3 color=blue><u><br>
</u></font><a href="mailto:mpi3-ft@lists.mpi-forum.org"><font size=3 color=blue><u>mpi3-ft@lists.mpi-forum.org</u></font></a><font size=3 color=blue><u><br>
</u></font><a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft" target=_blank><font size=3 color=blue><u>http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft</u></font></a>
<br><tt><font size=2>_______________________________________________<br>
mpi3-ft mailing list<br>
mpi3-ft@lists.mpi-forum.org<br>
</font></tt><a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft"><tt><font size=2>http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft</font></tt></a>
<br>