<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
{font-family:Calibri;
panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
{font-family:Tahoma;
panose-1:2 11 6 4 3 5 4 4 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
{margin:0in;
margin-bottom:.0001pt;
font-size:12.0pt;
font-family:"Times New Roman","serif";}
a:link, span.MsoHyperlink
{mso-style-priority:99;
color:blue;
text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
{mso-style-priority:99;
color:purple;
text-decoration:underline;}
span.hoenzb
{mso-style-name:hoenzb;}
span.EmailStyle18
{mso-style-type:personal-reply;
font-family:"Calibri","sans-serif";
color:#1F497D;}
.MsoChpDefault
{mso-style-type:export-only;
font-family:"Calibri","sans-serif";}
@page WordSection1
{size:8.5in 11.0in;
margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
{page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>Actually, I think that we can be backwards compatible. Define semantics to say that we don’t guarantee that MPI_ANY_SOURCE will get unblocked due to failure but don’t preclude this possibility.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>I think I’m coming down on the blocks side as well but for a less pessimistic reason than Josh. Standards bodies are conservative for a reason: mistakes in standards are expensive. As such, if there is any feature that can be evaluated outside the standard before being included in the standard, then this is the preferable path. MPI_ANY_SOURCE returns is exactly such a feature. Sure, users will be harmed in the short term but if this is not quite the best semantics, then they’ll be harmed in the long term. <o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'>As such, lets go for the most barebones spec we can come up with on top of which we can implement all the other functionality we think is important. This gives us the flexibility to try out several APIs and decide on which is best before we come back before the forum to standardize the full MPI-FT API. At that point in time we’ll have done a significantly stronger evaluation, which will make it much more difficult for the forum to say no, even though the list of features will be significantly more extensive in that proposal.<o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'>Greg Bronevetsky</span><span style='color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'>Lawrence Livermore National Lab</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'>(925) 424-5756</span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href="mailto:bronevetsky@llnl.gov">bronevetsky@llnl.gov</a></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:10.5pt;font-family:"Calibri","sans-serif";color:#1F497D'><a href="http://greg.bronevetsky.com">http://greg.bronevetsky.com</a></span><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p></o:p></span></p><p class=MsoNormal><span style='font-size:11.0pt;font-family:"Calibri","sans-serif";color:#1F497D'><o:p> </o:p></span></p><div style='border:none;border-left:solid blue 1.5pt;padding:0in 0in 0in 4.0pt'><div><div style='border:none;border-top:solid #B5C4DF 1.0pt;padding:3.0pt 0in 0in 0in'><p class=MsoNormal><b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'>From:</span></b><span style='font-size:10.0pt;font-family:"Tahoma","sans-serif"'> mpi3-ft-bounces@lists.mpi-forum.org [mailto:mpi3-ft-bounces@lists.mpi-forum.org] <b>On Behalf Of </b>Josh Hursey<br><b>Sent:</b> Thursday, January 26, 2012 8:11 AM<br><b>To:</b> MPI 3.0 Fault Tolerance and Dynamic Process Control working Group<br><b>Subject:</b> Re: [Mpi3-ft] MPI_ANY_SOURCE ... again...<o:p></o:p></span></p></div></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>I mentioned something similar to folks here yesterday. If we decide on the "MPI_ANY_SOURCE blocks" semantics then I would expose the failure notification through an Open MPI specific API (or message in a special context, as Greg suggests), and the third-party library could short circuit their implementation of the detector/notifier with this call. I would then strongly advocate that other MPI implementations do the same.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I think the distasteful aspect of the "MPI_ANY_SOURCE blocks" path is that if we are going to advocate that MPI implementations provide this type of interface anyway then why can we not just expose these semantics in the standard and be done with it. With the proposed work around, applications will be programming to the MPI standard and the semantics of this third-party library for MPI_ANY_SOURCE. So it just seems like we are working around a stalemate argument in the forum and the users end up suffering. However, if we stick with the "MPI_ANY_SOURCE returns on error" semantics we would have to thread the needle of the progress discussion (possible, but it may take quite a long time).<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>So this is where I'm torn. If there was a backwards compatible path between the "MPI_ANY_SOURCE blocks" to the "MPI_ANY_SOURCE returns on error" then it would be easier to go with the former and propose the latter in a separate ticket. Then have the progress discussion over the separate ticket, and not the general RTS proposal. Maybe that path is defining a new MPI_ANY_SORCE_RETURN_ON_PROC_FAIL wildcard.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>I am, unfortunately, starting to lean towards the "MPI_ANY_SOURCE blocks" camp. I say 'unfortunately' because it hurts users, and that's not something we should be considering in my opinion...<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>Good comments, keep them coming.<o:p></o:p></p></div><div><p class=MsoNormal><o:p> </o:p></p></div><div><p class=MsoNormal>-- Josh<o:p></o:p></p></div><p class=MsoNormal><o:p> </o:p></p><div><p class=MsoNormal>On Thu, Jan 26, 2012 at 10:48 AM, Bronevetsky, Greg <<a href="mailto:bronevetsky1@llnl.gov">bronevetsky1@llnl.gov</a>> wrote:<o:p></o:p></p><p class=MsoNormal>I agree that the "MPI_ANY_SOURCE returns on error" semantics is better for users. However, if this is going to be a sticking point for the rest of the forum, it is not actually that difficult to fake this functionality on top of the "MPI_ANY_SOURCE blocks" semantics. Josh, you correctly pointed out that the MPI implementation should be able to leverage its own out of band failure detectors to implement the "returns" functionality but if that is the case, why can't the vendor provide an optional layer to the user that will do exactly the same thing but without messing with the MPI forum?<br><br>What I'm proposing is that vendors or any other software developers provide a failure notification layer that sends an MPI message on a pre-defined communicator to the process. They would also provide a PMPI layer that wraps MPI_Receive(MPI_ANY_SOURCE) so that it alternates between testing for the arrival of messages that match this operation and a failure notification message. If the former arrives first, the wrapper returns normally. If the latter arrives first, the original MPI_Receive(MPI_ANY_SOURCE) is cancelled and the call returns with an error. Conveniently, since the failure notifier and the PMPI layer are orthogonal, we can connect the application to any failure detector, making it possible to provide these for systems where the vendors are lazy.<br><span style='color:#888888'><br><span class=hoenzb>Greg Bronevetsky</span><br><span class=hoenzb>Lawrence Livermore National Lab</span><br><span class=hoenzb><a href="tel:%28925%29%20424-5756">(925) 424-5756</a></span><br><span class=hoenzb><a href="mailto:bronevetsky@llnl.gov">bronevetsky@llnl.gov</a></span><br><span class=hoenzb><a href="http://greg.bronevetsky.com" target="_blank">http://greg.bronevetsky.com</a></span></span><o:p></o:p></p><div><div><p class=MsoNormal style='margin-bottom:12.0pt'><br><br>> -----Original Message-----<br>> From: <a href="mailto:mpi3-ft-bounces@lists.mpi-forum.org">mpi3-ft-bounces@lists.mpi-forum.org</a> [mailto:<a href="mailto:mpi3-ft-">mpi3-ft-</a><br>> <a href="mailto:bounces@lists.mpi-forum.org">bounces@lists.mpi-forum.org</a>] On Behalf Of Martin Schulz<br>> Sent: Wednesday, January 25, 2012 4:30 PM<br>> To: MPI 3.0 Fault Tolerance and Dynamic Process Control working Group<br>> Subject: Re: [Mpi3-ft] MPI_ANY_SOURCE ... again...<br>><br>> Hi Josh, all,<br>><br>> I agree, I think the current approach is fine. Blocking is likely to be more<br>> problematic in many cases, IMHO. However, I am still a bit worried about<br>> splitting the semantics for P2P and Collective routines. I don't see a reason<br>> why a communicator after a collective call to validate wouldn't support<br>> ANY_SOURCE. If it is split, though, any intermediate layer trying to replace<br>> collectives with P2P solutions (and there are plenty of tuning frameworks out<br>> there that try exactly that) have a hard time maintaing the same semantics in<br>> an error case.<br>><br>> Martin<br>><br>><br>> On Jan 25, 2012, at 3:06 PM, Howard Pritchard wrote:<br>><br>> > Hi Josh,<br>> ><br>> > Cray is okay with the semantics described in the current FTWG proposal<br>> > attached to the ticket.<br>> ><br>> > We plan to just leverage the out-of-band system fault detector<br>> > software that currently kills jobs if a node goes down that the job<br>> > was running on.<br>> ><br>> > Howard<br>> ><br>> > Josh Hursey wrote:<br>> >> We really need to make a decision on semantics for MPI_ANY_SOURCE.<br>> >><br>> >> During the plenary session the MPI Forum had a problem with the<br>> >> current proposed semantics. The current proposal states (roughly)<br>> >> that MPI_ANY_SOURCE return when a failure emerges in the<br>> >> communicator. The MPI Forum read this as a strong requirement for<br>> >> -progress- (something the MPI standard tries to stay away from).<br>> >><br>> >> The alternative proposal is that a receive on MPI_ANY_SOURCE will<br>> >> block until completed with a message. This means that it will -not-<br>> >> return when a new failure has been encountered (even if the calling<br>> >> process is the only process left alive in the communicator). This<br>> >> does get around the concern about progress, but puts a large burden on<br>> the end user.<br>> >><br>> >><br>> >> There are a couple good use cases for MPI_ANY_SOURCE (grumble,<br>> >> grumble)<br>> >> - Manager/Worker applications, and easy load balancing when multiple<br>> >> incoming messages are expected. This blocking behavior makes the use<br>> >> of MPI_ANY_SOURCE dangerous for fault tolerant applications, and<br>> >> opens up another opportunity for deadlock.<br>> >><br>> >> For applications that want to use MPI_ANY_SOURCE and be fault<br>> >> tolerant they will need to build their own failure detector on top of<br>> >> MPI using directed point-to-point messages. A basic implementation<br>> >> might post MPI_Irecv()'s to each worker process with an unused tag,<br>> >> then poll on Testany(). If any of these requests complete in error<br>> >> (MPI_ERR_PROC_FAIL_STOP) then the target has failed and the<br>> >> application can take action. This user-level failure detector can<br>> >> (should) be implemented in a third-party library since failure<br>> >> detectors can be difficult to implement in a scalable manner.<br>> >><br>> >> In reality, the MPI library or the runtime system that supports MPI<br>> >> will already be doing something similar. Even for<br>> >> MPI_ERRORS_ARE_FATAL on MPI_COMM_WORLD, the underlying system<br>> must<br>> >> detect the process failure, and terminate all other processes in<br>> >> MPI_COMM_WORLD. So this represents a -detection- of the failure, and<br>> >> a -notification- of the failure throughout the system (though the<br>> >> notification is an order to terminate). For MPI_ERRORS_RETURN, the<br>> >> MPI will use this detection/notification functionality to reason<br>> >> about the state of the message traffic in the system. So it seems<br>> >> silly to force the user to duplicate this (nontrivial)<br>> >> detection/notification functionality on top of MPI, just to avoid the<br>> progress discussion.<br>> >><br>> >><br>> >> So that is a rough summary of the debate. If we are going to move<br>> >> forward, we need to make a decision on MPI_ANY_SOURCE. I would like<br>> >> to make such a decision before/during the next teleconf (Feb. 1).<br>> >><br>> >> I'm torn on this one, so I look forward to your comments.<br>> >><br>> >> -- Josh<br>> >><br>> >> --<br>> >> Joshua Hursey<br>> >> Postdoctoral Research Associate<br>> >> Oak Ridge National Laboratory<br>> >> <a href="http://users.nccs.gov/~jjhursey" target="_blank">http://users.nccs.gov/~jjhursey</a><br>> >><br>> ><br>> ><br>> > --<br>> > Howard Pritchard<br>> > Software Engineering<br>> > Cray, Inc.<br>> > _______________________________________________<br>> > mpi3-ft mailing list<br>> > <a href="mailto:mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a><br>> > <a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft</a><br>><br>> ______________________________________________________________<br>> __________<br>> Martin Schulz, <a href="mailto:schulzm@llnl.gov">schulzm@llnl.gov</a>, <a href="http://people.llnl.gov/schulzm" target="_blank">http://people.llnl.gov/schulzm</a> CASC @<br>> Lawrence Livermore National Laboratory, Livermore, USA<br>><br>><br>><br>><br>> _______________________________________________<br>> mpi3-ft mailing list<br>> <a href="mailto:mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a><br>> <a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft</a><br><br>_______________________________________________<br>mpi3-ft mailing list<br><a href="mailto:mpi3-ft@lists.mpi-forum.org">mpi3-ft@lists.mpi-forum.org</a><br><a href="http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft" target="_blank">http://lists.mpi-forum.org/mailman/listinfo.cgi/mpi3-ft</a><o:p></o:p></p></div></div></div><p class=MsoNormal><br><br clear=all><o:p></o:p></p><div><p class=MsoNormal><o:p> </o:p></p></div><p class=MsoNormal>-- <br>Joshua Hursey<br>Postdoctoral Research Associate<br>Oak Ridge National Laboratory<br><a href="http://users.nccs.gov/~jjhursey" target="_blank">http://users.nccs.gov/~jjhursey</a><o:p></o:p></p></div></div></body></html>