<div dir="ltr">Hi Pavan and Antonio,<div><br></div><div>I implemented the scheme you suggested and it was much easier than I thought. Very nice, thanks for your help.</div><div><br></div><div>However, I noticed that the execution times were much higher than the cases in which the failure didn't occur.</div>

<div>Is there any reason, apart from some implementation mistake, to explain this behavior?<br></div><div><br></div><div>I don't know if it would help, but I am sending below part of the receiver process Fortran code.</div>

<div><br></div><div>Thanks in advance.</div><div><br></div><div>Best regards,<br></div><div>Luiz</div><div><br></div><div><div><font face="courier new, monospace">c-----------------------------------------------------------------------</font></div>

<div><font face="courier new, monospace">      subroutine my_receiver</font></div><div><font face="courier new, monospace">c     ------------------------------------------------------------------</font></div><div><font face="courier new, monospace">      (...)</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">c     Local</font></div><div><font face="courier new, monospace">c     -----</font></div><div><font face="courier new, monospace">      integer*4 m_stat(MPI_STATUS_SIZE)</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">      integer*4 m_request(zrecv)        ! request identifier for asynchronous receives</font></div><div><font face="courier new, monospace">      character card(zrecv)*(zbuf)      ! buffer for receiving messages</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">c     Pre-post RECVs</font></div><div><font face="courier new, monospace">c     --------------</font></div><div><font face="courier new, monospace">      do irecv = 1, zrecv</font></div>

<div><font face="courier new, monospace">        call MPI_IRECV(card(irecv), zbuf, MPI_CHARACTER,</font></div><div><font face="courier new, monospace">     .                 MPI_ANY_SOURCE, MPI_ANY_TAG, M_COMM_SDDP,</font></div>

<div><font face="courier new, monospace">     .                 m_request(irecv), m_ierr )</font></div><div><font face="courier new, monospace">      end do !irecv</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">      do while( keep_receiving )</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">c       Wait for any of the pre-posted requests to arrive</font></div>

<div><font face="courier new, monospace">c       -------------------------------------------------</font></div><div><font face="courier new, monospace">        call MPI_WAITANY(zrecv, m_request, irecv, m_stat, m_ierr)</font></div>

<div><br></div><div><font face="courier new, monospace">c       Process message: disk IO</font></div><div><font face="courier new, monospace">c       ---------------</font></div><div><font face="courier new, monospace">        <DO SOMETHING></font></div>

<div><font face="courier new, monospace">        if( SOMETHING_ELSE ) then</font></div><div><font face="courier new, monospace">          keep_receiving = .false.</font></div><div><font face="courier new, monospace">        end if</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">c       Re-post RECV</font></div><div><font face="courier new, monospace">c       ------------</font></div><div><font face="courier new, monospace">        call MPI_IRECV(card(irecv), zbuf, MPI_CHARACTER,</font></div>

<div><font face="courier new, monospace">     .                 MPI_ANY_SOURCE, MPI_ANY_TAG, M_COMM_SDDP,</font></div><div><font face="courier new, monospace">     .                 m_request(irecv), m_ierr)</font></div>
<div>
<font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">      end do</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">c     Cancel unused RECVs</font></div>

<div><font face="courier new, monospace">c     -------------------</font></div><div><font face="courier new, monospace">      do irecv = 1, zrecv</font></div><div><font face="courier new, monospace">        call MPI_CANCEL( m_request(irecv), m_ierr )</font></div>

<div><font face="courier new, monospace">      end do !irecv</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">      (...)</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">      return</font></div><div><font face="courier new, monospace">      end</font></div></div><div><br></div><div><br></div><div class="gmail_extra"><br><br><div class="gmail_quote">

On 1 November 2013 22:14, Luiz Carlos da Costa Junior <span dir="ltr"><<a href="mailto:lcjunior@ufrj.br" target="_blank">lcjunior@ufrj.br</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<div dir="ltr">Thanks</div><div class=""><div class="h5"><div class="gmail_extra"><br><br><div class="gmail_quote">On 1 November 2013 22:00, 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:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex"><div><br>
On Nov 1, 2013, at 4:30 PM, Luiz Carlos da Costa Junior <<a href="mailto:lcjunior@ufrj.br" target="_blank">lcjunior@ufrj.br</a>> wrote:<br>
> I understand that I will have to have N buffers, one for each posted MPI_Irecv. I will also have to TEST (using MPI_PROBE or MPI_WAITANY) until a message comes. The result of this test will identify which one of the posted MPI_Irecv has actually received the message and then process the right buffer. Is this correct?<br>



<br>
</div>Correct.<br>
<div><br>
> Should I have to change anything at the sender's processes?<br>
<br>
</div>Likely not.  But you need to think through your algorithm to confirm that.<br>
<div><br>
> At the end, my receiver process receives a message identifying that it should exit this routine. What should I do with the already posted MPI_Irecv's? Can I cancel them?<br>
<br>
</div>Yes, you can with MPI_CANCEL.<br>
<div><div><br>
  —- Pavan<br>
<br>
--<br>
Pavan Balaji<br>
<a href="http://www.mcs.anl.gov/~balaji" target="_blank">http://www.mcs.anl.gov/~balaji</a><br>
_______________________________________________<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/mailman/listinfo/discuss</a><br>
</div></div></blockquote></div><br></div>
</div></div></blockquote></div><br></div></div>