<?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 are gone: what does it mean to you?</title>
	<atom:link href="http://blogs.cisco.com/performance/the-mpi-c-bindings-are-gone-what-does-it-mean-to-you/feed/" rel="self" type="application/rss+xml" />
	<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-are-gone-what-does-it-mean-to-you/</link>
	<description></description>
	<lastBuildDate>Sat, 25 May 2013 08:57:12 +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-are-gone-what-does-it-mean-to-you/#comment-683910</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Mon, 22 Oct 2012 16:37:11 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86646#comment-683910</guid>
		<description><![CDATA[Thanks Jeff for taking a look at the Boost innards for me :)

It seems like the Boost folks could just expose deserialization.  Boost.MPI already depends explicitly on Boost&#039;s serialization facility.  Once you synch up the window, there&#039;s a perfectly valid buffer of MPI_PACKED waiting for you to deserialize.  There&#039;s nothing terribly exotic about that interface, though it would force them to distinguish between types that require serialization and types that don&#039;t.

Another thing they could do would be to register a callback on the window for synch operations.  The callback automatically deserializes when the user requests a synch.  For C++ types T that require serialization, this would use a hidden array of char that would be the actual window.  This would be tricky because you would have to know the offset into the window on both sides.

Should I go talk to the Boost.MPI folks?]]></description>
		<content:encoded><![CDATA[<p>Thanks Jeff for taking a look at the Boost innards for me <img src='http://blogs.cisco.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>It seems like the Boost folks could just expose deserialization.  Boost.MPI already depends explicitly on Boost&#8217;s serialization facility.  Once you synch up the window, there&#8217;s a perfectly valid buffer of MPI_PACKED waiting for you to deserialize.  There&#8217;s nothing terribly exotic about that interface, though it would force them to distinguish between types that require serialization and types that don&#8217;t.</p>
<p>Another thing they could do would be to register a callback on the window for synch operations.  The callback automatically deserializes when the user requests a synch.  For C++ types T that require serialization, this would use a hidden array of char that would be the actual window.  This would be tricky because you would have to know the offset into the window on both sides.</p>
<p>Should I go talk to the Boost.MPI folks?
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',683910)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-683910">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Jeff Hammond</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-are-gone-what-does-it-mean-to-you/#comment-683856</link>
		<dc:creator>Jeff Hammond</dc:creator>
		<pubDate>Mon, 22 Oct 2012 14:08:25 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86646#comment-683856</guid>
		<description><![CDATA[My understanding is that serialization must be symmetric with deserialization when used.  In MPI send-recv, this is not a problem, since the Boost.MPI recv call can call the deserialization after MPI_Recv.  However, in RMA, this is not possible because the target is passive.

Looking at http://www.boost.org/doc/libs/1_46_1/boost/mpi/communicator.hpp, I see the following:

  /**
   * INTERNAL ONLY
   *
   * We&#039;re sending a type that does not have an associated MPI
   * datatype, so it must be serialized then sent as MPI_PACKED data,
   * to be deserialized on the receiver side.
   */
  template
  void send_impl(int dest, int tag, const T&amp; value, mpl::false_) const;

The &quot;so it must be serialized then sent as MPI_PACKED data , to be deserialized on the receiver side&quot; is what can&#039;t happen with RMA.  There is no way to call MPI_UNPACK

Perhaps there is a way to do this all with MPI datatypes.  I don&#039;t know though because I am not a C++ guru nor do my applications require exotic types.

I don&#039;t see any problem with your restricted usage of RMA (MPI datatypes but not Boost.Serialization objects) but I&#039;m not sure the Boost.MPI community is.  If there are to be new MPI C++ bindings in the standard some day in the future, I have to assume they will be conservative regarding types such that they can be implemented in a straightforward way on top of the MPI communication features available at the time.]]></description>
		<content:encoded><![CDATA[<p>My understanding is that serialization must be symmetric with deserialization when used.  In MPI send-recv, this is not a problem, since the Boost.MPI recv call can call the deserialization after MPI_Recv.  However, in RMA, this is not possible because the target is passive.</p>
<p>Looking at <a href="http://www.boost.org/doc/libs/1_46_1/boost/mpi/communicator.hpp" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/boost/mpi/communicator.hpp</a>, I see the following:</p>
<p>  /**<br />
   * INTERNAL ONLY<br />
   *<br />
   * We&#8217;re sending a type that does not have an associated MPI<br />
   * datatype, so it must be serialized then sent as MPI_PACKED data,<br />
   * to be deserialized on the receiver side.<br />
   */<br />
  template<br />
  void send_impl(int dest, int tag, const T&amp; value, mpl::false_) const;</p>
<p>The &#8220;so it must be serialized then sent as MPI_PACKED data , to be deserialized on the receiver side&#8221; is what can&#8217;t happen with RMA.  There is no way to call MPI_UNPACK</p>
<p>Perhaps there is a way to do this all with MPI datatypes.  I don&#8217;t know though because I am not a C++ guru nor do my applications require exotic types.</p>
<p>I don&#8217;t see any problem with your restricted usage of RMA (MPI datatypes but not Boost.Serialization objects) but I&#8217;m not sure the Boost.MPI community is.  If there are to be new MPI C++ bindings in the standard some day in the future, I have to assume they will be conservative regarding types such that they can be implemented in a straightforward way on top of the MPI communication features available at the time.
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',683856)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-683856">0</span> likes</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Mark Hoemmen</title>
		<link>http://blogs.cisco.com/performance/the-mpi-c-bindings-are-gone-what-does-it-mean-to-you/#comment-682876</link>
		<dc:creator>Mark Hoemmen</dc:creator>
		<pubDate>Sat, 20 Oct 2012 19:09:52 +0000</pubDate>
		<guid isPermaLink="false">http://blogs.cisco.com/?p=86646#comment-682876</guid>
		<description><![CDATA[Hi Jeff -- Could you clarify what you said about active messages being needed if Boost.MPI wanted to support one-sided communication?  My understanding is that one-sided communication works as long as you aren&#039;t using custom MPI_Op.  Thus, MPI_Put and MPI_Get should be fine; it&#039;s just MPI_Accumulate and ilk that pose issues.  Is that correct?

I actually wouldn&#039;t mind if one-sided communication were only supported for certain C++ types, as long as there is a traits class that tells me whether it&#039;s supported.

I&#039;m sad that we made the decision a while back not to use Boost.MPI.  We had our reasons at the time (dealing with a certain compiler&#039;s inability to build Boost) but I do think we could have handled that better.]]></description>
		<content:encoded><![CDATA[<p>Hi Jeff &#8212; Could you clarify what you said about active messages being needed if Boost.MPI wanted to support one-sided communication?  My understanding is that one-sided communication works as long as you aren&#8217;t using custom MPI_Op.  Thus, MPI_Put and MPI_Get should be fine; it&#8217;s just MPI_Accumulate and ilk that pose issues.  Is that correct?</p>
<p>I actually wouldn&#8217;t mind if one-sided communication were only supported for certain C++ types, as long as there is a traits class that tells me whether it&#8217;s supported.</p>
<p>I&#8217;m sad that we made the decision a while back not to use Boost.MPI.  We had our reasons at the time (dealing with a certain compiler&#8217;s inability to build Boost) but I do think we could have handled that better.
<p class="comment-like"><img class="comment-like-btn" title="Vote" onclick="cl_like_this('http://blogs.cisco.com/wp-admin/admin-ajax.php',682876)" src="http://blogs.cisco.com/wp-content/plugins/comments-likes/images/like.png" />&nbsp;&nbsp;&nbsp;<span id="comment-like-cnt-682876">0</span> likes</p>
]]></content:encoded>
	</item>
</channel>
</rss>
