<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: The MPI C++ bindings: what happened, and why?</title>
	<atom:link href="http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/</link>
	<description></description>
	<lastBuildDate>Mon, 20 May 2013 00:03:22 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	
	<item>
		<title>By: Mark Hoemmen</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-681606</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Thu, 18 Oct 2012 16:02:16 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-681606</guid>
		<description><![CDATA[Hi Alexander --

My sense is that the Boost developers have thought the most about the fundamental complexities of mapping arbitrary C++ types to their corresponding MPI_Datatype, and arbitrary C++ functions to their corresponding MPI_Op, in a way that serves the needs of generic programming.  We&#039;ve thought a lot about it too.   I see that as the center of a good C++ interface to MPI.]]></description>
		<content:encoded><![CDATA[<p>Hi Alexander &#8211;</p>
<p>My sense is that the Boost developers have thought the most about the fundamental complexities of mapping arbitrary C++ types to their corresponding MPI_Datatype, and arbitrary C++ functions to their corresponding MPI_Op, in a way that serves the needs of generic programming.  We&#8217;ve thought a lot about it too.   I see that as the center of a good C++ interface to MPI.
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',681606)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-681606">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Alexander Supalov</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-681467</link>
		<dc:creator>Alexander Supalov</dc:creator>
		<pubDate>Thu, 18 Oct 2012 10:52:35 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-681467</guid>
		<description><![CDATA[Hi,

As far as I can recall, there was a lot more discussion around this topic, and a lot more controversy at the Forum, too.

Extending the existing C++ bindings would be a mostly mechanical act. However, the atmosphere was such that an attempt to do this would likely be futile, and since there were much more interesting matters to ponder, there were no volunteers. In the end, the Forum got swayed by the arguments mentioned above.

I, for one, thought then, and I still think, that the deprecation and then removal of the C++ bindings without provision of a viable alternative was a wrong move. So, I consistently argued against this proposal.

Well, what’s been done is done. Now we are left with a situation in which both major open source implementations and their relatives, as well as, most likely, many related and independent commercial ones, are going to support the “removed” C++ bindings for the foreseeable future. The same may be true of the &quot;removed&quot; interfaces, by the way.

I cannot describe the current state by another word but limbo. On one hand, we have C++ bindings that are in the products and may still be used by someone (actually, anyone). On the other hand, deprecation in MPI-2.2 stopped any further development here, including maintenance and bug fixing. I.e., many products provide MPI-2.1 support as far as C++ is concerned, while supporting MPI-2.2 and beyond elsewhere.

How this is going to work out in the long run remains to be seen. The C++ interface may indeed die out. However, I will not wonder if someone steps in and provides complete and consistent C++ bindings for MPI-3 once, either based on the bindings that have been removed, or on boost, or on something else.

This would be a worthy quest for those looking at how to help MPI evolve. If inclusion into the standard proper is not considered possible, the example of the MPIR debugging interface, that was officially blessed by the Forum while not becoming a part of the standard, may serve as inspiration to those concerned.

This, by the way, is a path that may be taken by other MPI language bindings aspiring to a more formal status.

Best regards.

Alexander]]></description>
		<content:encoded><![CDATA[<p>Hi,</p>
<p>As far as I can recall, there was a lot more discussion around this topic, and a lot more controversy at the Forum, too.</p>
<p>Extending the existing C++ bindings would be a mostly mechanical act. However, the atmosphere was such that an attempt to do this would likely be futile, and since there were much more interesting matters to ponder, there were no volunteers. In the end, the Forum got swayed by the arguments mentioned above.</p>
<p>I, for one, thought then, and I still think, that the deprecation and then removal of the C++ bindings without provision of a viable alternative was a wrong move. So, I consistently argued against this proposal.</p>
<p>Well, what’s been done is done. Now we are left with a situation in which both major open source implementations and their relatives, as well as, most likely, many related and independent commercial ones, are going to support the “removed” C++ bindings for the foreseeable future. The same may be true of the &#8220;removed&#8221; interfaces, by the way.</p>
<p>I cannot describe the current state by another word but limbo. On one hand, we have C++ bindings that are in the products and may still be used by someone (actually, anyone). On the other hand, deprecation in MPI-2.2 stopped any further development here, including maintenance and bug fixing. I.e., many products provide MPI-2.1 support as far as C++ is concerned, while supporting MPI-2.2 and beyond elsewhere.</p>
<p>How this is going to work out in the long run remains to be seen. The C++ interface may indeed die out. However, I will not wonder if someone steps in and provides complete and consistent C++ bindings for MPI-3 once, either based on the bindings that have been removed, or on boost, or on something else.</p>
<p>This would be a worthy quest for those looking at how to help MPI evolve. If inclusion into the standard proper is not considered possible, the example of the MPIR debugging interface, that was officially blessed by the Forum while not becoming a part of the standard, may serve as inspiration to those concerned.</p>
<p>This, by the way, is a path that may be taken by other MPI language bindings aspiring to a more formal status.</p>
<p>Best regards.</p>
<p>Alexander
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',681467)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-681467">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Hoemmen</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-681112</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Wed, 17 Oct 2012 20:13:01 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-681112</guid>
		<description><![CDATA[Jeff Squyres asked: &quot;As you mentioned in a later comment, you’re working on a new C++ wrapper for your software library. Do you see yourself — or anyone else, for that matter — taking up the mantle of extending boost.mpi to support more than MPI 1.1?&quot;

I&#039;m actually refactoring an existing wrapper.  I would much rather contribute to a popular standard library, such as Boost.MPI, but it would take too long to rewrite everything to use a different interface, and backwards compatibility demands that I support the existing interface for a while at least.  

My hope is that the documents I&#039;ve been writing to guide the refactoring work might be useful to Boost.MPI developers or other groups working on a C++ interface to MPI.  I would be glad to contribute directly, except that I already have a pile of work to do with the existing C++ interface and might not have time to do a good job with Boost.MPI work.

&quot;BTW, what features of MPI-2 (or MPI-3) do you want to use in boost.mpi?&quot;

One-sided communication, nonblocking collectives, and perhaps also the neighborhood collectives.

Thanks Jeff!]]></description>
		<content:encoded><![CDATA[<p>Jeff Squyres asked: &#8220;As you mentioned in a later comment, you’re working on a new C++ wrapper for your software library. Do you see yourself — or anyone else, for that matter — taking up the mantle of extending boost.mpi to support more than MPI 1.1?&#8221;</p>
<p>I&#8217;m actually refactoring an existing wrapper.  I would much rather contribute to a popular standard library, such as Boost.MPI, but it would take too long to rewrite everything to use a different interface, and backwards compatibility demands that I support the existing interface for a while at least.  </p>
<p>My hope is that the documents I&#8217;ve been writing to guide the refactoring work might be useful to Boost.MPI developers or other groups working on a C++ interface to MPI.  I would be glad to contribute directly, except that I already have a pile of work to do with the existing C++ interface and might not have time to do a good job with Boost.MPI work.</p>
<p>&#8220;BTW, what features of MPI-2 (or MPI-3) do you want to use in boost.mpi?&#8221;</p>
<p>One-sided communication, nonblocking collectives, and perhaps also the neighborhood collectives.</p>
<p>Thanks Jeff!
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',681112)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-681112">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Squyres</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-680637</link>
		<dc:creator>Jeff Squyres</dc:creator>
		<pubDate>Wed, 17 Oct 2012 00:56:28 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-680637</guid>
		<description><![CDATA[There has been *some* talk of using more modern languages in the MPI Forum, where things like auto-type deduction can occur (and therefore the reliance on MPI datatypes could be decreased), but not much.

One historical note that I didn&#039;t include in the blog post is that the Forum *did* look at standardizing a C++ class library (Object Oriented MPI -- or OOMPI) back in the MPI-2 timeframe.  OOMPI added a bunch of C++-specific semantics on top of the existing MPI bindings.  After much debate, the Forum (rightly, IMHO) decided that it should only be in the business of standardizing one set of semantics paired with language-neutral bindings.  Then basing language-specific bindings on top of those.

To be clear: the bindings that MPI provides effect *the language-neutral semantic specifications* as described in the MPI documents.  This is what led the C++ bindings to be essentially a 1:1 mapping to the C (i.e., language-neutral) bindings.  If bindings provide more/different semantics than what is expressed in the MPI specification, that is, by definition, a higher/different abstraction than what the MPI specification provides.

The Forum is all in favor of higher levels of abstraction above the base bindings, especially those that take advantage of language features (like generic programming).  It&#039;s just not in the Forum&#039;s purview to provide such higher-level abstractions.

Make sense?]]></description>
		<content:encoded><![CDATA[<p>There has been *some* talk of using more modern languages in the MPI Forum, where things like auto-type deduction can occur (and therefore the reliance on MPI datatypes could be decreased), but not much.</p>
<p>One historical note that I didn&#8217;t include in the blog post is that the Forum *did* look at standardizing a C++ class library (Object Oriented MPI &#8212; or OOMPI) back in the MPI-2 timeframe.  OOMPI added a bunch of C++-specific semantics on top of the existing MPI bindings.  After much debate, the Forum (rightly, IMHO) decided that it should only be in the business of standardizing one set of semantics paired with language-neutral bindings.  Then basing language-specific bindings on top of those.</p>
<p>To be clear: the bindings that MPI provides effect *the language-neutral semantic specifications* as described in the MPI documents.  This is what led the C++ bindings to be essentially a 1:1 mapping to the C (i.e., language-neutral) bindings.  If bindings provide more/different semantics than what is expressed in the MPI specification, that is, by definition, a higher/different abstraction than what the MPI specification provides.</p>
<p>The Forum is all in favor of higher levels of abstraction above the base bindings, especially those that take advantage of language features (like generic programming).  It&#8217;s just not in the Forum&#8217;s purview to provide such higher-level abstractions.</p>
<p>Make sense?
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',680637)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-680637">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Squyres</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-680612</link>
		<dc:creator>Jeff Squyres</dc:creator>
		<pubDate>Wed, 17 Oct 2012 00:31:48 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-680612</guid>
		<description><![CDATA[Mark --

As you mentioned in a later comment, you&#039;re working on a new C++ wrapper for your software library.  Do you see yourself -- or anyone else, for that matter -- taking up the mantle of extending boost.mpi to support more than MPI 1.1?

BTW, what features of MPI-2 (or MPI-3) do you want to use in boost.mpi?]]></description>
		<content:encoded><![CDATA[<p>Mark &#8211;</p>
<p>As you mentioned in a later comment, you&#8217;re working on a new C++ wrapper for your software library.  Do you see yourself &#8212; or anyone else, for that matter &#8212; taking up the mantle of extending boost.mpi to support more than MPI 1.1?</p>
<p>BTW, what features of MPI-2 (or MPI-3) do you want to use in boost.mpi?
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',680612)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-680612">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Hoemmen</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-680609</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Wed, 17 Oct 2012 00:26:15 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-680609</guid>
		<description><![CDATA[Hi Matt -- I&#039;d love to chat more, as I&#039;ve been working on a design document for refactoring the C++ wrapper for MPI in our big software library.  It would be great to learn more about your experiences working with Boost.MPI too.]]></description>
		<content:encoded><![CDATA[<p>Hi Matt &#8212; I&#8217;d love to chat more, as I&#8217;ve been working on a design document for refactoring the C++ wrapper for MPI in our big software library.  It would be great to learn more about your experiences working with Boost.MPI too.
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',680609)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-680609">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Matt D.</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-680518</link>
		<dc:creator>Matt D.</dc:creator>
		<pubDate>Tue, 16 Oct 2012 21:04:14 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-680518</guid>
		<description><![CDATA[Thanks for the summary!

I think this is (or was) the core of the problem:
&quot;The C++ bindings were (intentionally) a more-or-less 1:1 mapping to the C bindings.&quot;

As a C++ developer in HPC area, this is one of the main reasons to choose Boost.MPI instead. In short, it doesn&#039;t feature the above-mentioned impedance mismatch: C++ is fundamentally a very different language than C and attempting to maintain things 1:1 all the way essentially amounts to actively fighting the language -- rarely a good idea.

At the same time, I do find the lack of the up-to-date features (like support limited to a subset of MPI 1.1 Mark has mentioned above) a growing annoyance.

In the future, if any direct (as opposed to going-through-C) support for C++ were to be resurrected, I&#039;d gladly see it done the (modern) C++ way, i.e., more along the lines of Boost.MPI (and not necessarily limited to OOP -- generic programming (GP) and automatic type-inference features present in modern C++ are important enabling factors of its relatively higher expressivitiy and ease of use).]]></description>
		<content:encoded><![CDATA[<p>Thanks for the summary!</p>
<p>I think this is (or was) the core of the problem:<br />
&#8220;The C++ bindings were (intentionally) a more-or-less 1:1 mapping to the C bindings.&#8221;</p>
<p>As a C++ developer in HPC area, this is one of the main reasons to choose Boost.MPI instead. In short, it doesn&#8217;t feature the above-mentioned impedance mismatch: C++ is fundamentally a very different language than C and attempting to maintain things 1:1 all the way essentially amounts to actively fighting the language &#8212; rarely a good idea.</p>
<p>At the same time, I do find the lack of the up-to-date features (like support limited to a subset of MPI 1.1 Mark has mentioned above) a growing annoyance.</p>
<p>In the future, if any direct (as opposed to going-through-C) support for C++ were to be resurrected, I&#8217;d gladly see it done the (modern) C++ way, i.e., more along the lines of Boost.MPI (and not necessarily limited to OOP &#8212; generic programming (GP) and automatic type-inference features present in modern C++ are important enabling factors of its relatively higher expressivitiy and ease of use).
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',680518)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-680518">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Hoemmen</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-what-happened-and-why/#comment-680509</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Tue, 16 Oct 2012 20:03:00 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86659#comment-680509</guid>
		<description><![CDATA[Thanks for the concise clarification!  It&#039;s been great to discuss C++ issues with you.  I do think the biggest value a C++ interface to MPI could add would be better support for generic programming.  Boost.MPI has done a good job with that, though it only supports a subset of MPI 1.1 and people have complained that it doesn&#039;t use native MPI datatypes enough.  I agree that handling all possible cases requires C++ expertise well beyond the scope of the MPI Forum.

Another place where a C++ interface could add value would be for recovering from process failure via the normal exception-handling mechanisms (rather than a nonidiomatic callback mechanism).  This would only help, though, if future versions of the MPI standard better define the state of the world after a process dies.

Anyway, great summary of the issues!]]></description>
		<content:encoded><![CDATA[<p>Thanks for the concise clarification!  It&#8217;s been great to discuss C++ issues with you.  I do think the biggest value a C++ interface to MPI could add would be better support for generic programming.  Boost.MPI has done a good job with that, though it only supports a subset of MPI 1.1 and people have complained that it doesn&#8217;t use native MPI datatypes enough.  I agree that handling all possible cases requires C++ expertise well beyond the scope of the MPI Forum.</p>
<p>Another place where a C++ interface could add value would be for recovering from process failure via the normal exception-handling mechanisms (rather than a nonidiomatic callback mechanism).  This would only help, though, if future versions of the MPI standard better define the state of the world after a process dies.</p>
<p>Anyway, great summary of the issues!
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',680509)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-680509">2</span> likes</p>
]]></content:encoded>
	</item>
</channel>
</rss>
