<font size=2 face="sans-serif">Based on the proposal:</font>
<br>
<br><font size=2 face="sans-serif">MPI_Comm_failure_ack(blah, blah)</font>
<br>
<br><font size=2 face="CMR10">This local operation gives the users a way
to </font><font size=2 face="CMTI10">acknowledge </font><font size=2 face="CMR10">all
locally noticed failures on</font>
<br><font size=2 face="CMSS10">comm</font><font size=2 face="CMR10">. After
the call, unmatched </font><font size=2 face="CMSS10">MPI</font><font size=2 face="CMTT10">_</font><font size=2 face="CMSS10">ANY</font><font size=2 face="CMTT10">_</font><font size=2 face="CMSS10">SOURCE
</font><font size=2 face="CMR10">receptions that would have raised an</font>
<br><font size=2 face="CMR10">error code </font><font size=2 face="CMSS10">MPI</font><font size=2 face="CMTT10">_</font><font size=2 face="CMSS10">ERR</font><font size=2 face="CMTT10">_</font><font size=2 face="CMSS10">PENDING
</font><font size=2 face="CMR10">due to process failure (see Section </font><font size=2 color=blue face="CMR10">17.2.2</font><font size=2 face="CMR10">)
proceed without</font>
<br><font size=2 face="CMR10">further reporting of errors due to those
acknowledged failures.</font>
<br>
<br><font size=2 face="CMR10">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>
<br>
<br><font size=2 face="CMR10">I believe the following code will NOT work
(i.e. after the first failure, the MPI_Recv will continuously fail):</font>
<br>
<br>
<br><font size=2 face="CMR10">MPI_Comm_size(intercomm, &size);</font>
<br><font size=2 face="CMR10">while (failures < size) {</font>
<br><font size=2 face="CMR10"> err =
MPI_Recv(blah, blah, MPI_ANY_SOURCE, intercomm, &status);</font>
<br><font size=2 face="CMR10"> if (err
== MPI_PROC_FAILED) {</font>
<br><font size=2 face="CMR10">
MPI_Comm_failure_ack(intercomm);</font>
<br><font size=2 face="CMR10">
MPI_Comm_failure_get_acked(intercomm, &group);</font>
<br><font size=2 face="CMR10">
MPI_Group_size(group, &failures);</font>
<br><font size=2 face="CMR10"> } else
{</font>
<br><font size=2 face="CMR10">
/* process received data */</font>
<br><font size=2 face="CMR10"> }</font>
<br><font size=2 face="CMR10">}</font>
<br>
<br><font size=2 face="CMR10">and has to be written as:</font>
<br>
<br><font size=2 face="CMR10">MPI_Comm_size(intercomm, &size);</font>
<br><font size=2 face="CMR10">while (failures < size) {</font>
<br>
<br><font size=2 face="CMR10"> if (request
== MPI_REQUEST_NULL) {</font>
<br><font size=2 face="CMR10">
err = MPI_Irecv(blah, blah, MPI_ANY_SOURCE,
intercomm, &request);</font>
<br><font size=2 face="CMR10"> }</font>
<br><font size=2 face="CMR10"> err =
MPI_Wait(&request, &status);</font>
<br>
<br><font size=2 face="CMR10"> if (err
== MPI_ERR_PENDING) {</font>
<br><font size=2 face="CMR10">
MPI_Comm_failure_ack(intercomm);</font>
<br><font size=2 face="CMR10">
MPI_Comm_failure_get_acked(intercomm, &group);</font>
<br><font size=2 face="CMR10">
MPI_Group_size(group, &failures);</font>
<br><font size=2 face="CMR10"> } else
{</font>
<br><font size=2 face="CMR10">
/* process received data */</font>
<br><font size=2 face="CMR10"> }</font>
<br><font size=2 face="CMR10">}</font>
<br>
<br><font size=2 face="CMR10">Am I correct in my thinking?</font>
<br><font size=2 face="CMR10">If so, was there a reason why MPI_Recv could
not also "obey" MPI_Comm_failure_ack calls? </font>
<br>
<br><font size=2 face="CMR10">Thanks,</font>
<br><font size=2 face="CMR10">Dave</font>