<HTML><BODY style="word-wrap: break-word; -khtml-nbsp-mode: space; -khtml-line-break: after-white-space; "><DIV><BLOCKQUOTE type="cite"><BLOCKQUOTE type="cite"><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">This is a great discussion so far.<SPAN class="Apple-converted-space">  </SPAN>I'm actually also working on a</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">similar tool to automate C++ serialization which uses GCCXML as its</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">first step.<SPAN class="Apple-converted-space">  </SPAN>My approach is different in a few ways though:</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">1. It uses a visual tool.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">2. It's intended for the high performance computing (HPC) community.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">3. As a result of 2, the serialization is to MPI, not sockets.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">We've encountered most of the issues you guys have discussed in the</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">email, and I think with the visual tool we've solved all of them.<SPAN class="Apple-converted-space">  </SPAN>The</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">tool allows the user to select a datatype from their program and then</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">gives them a treeview of the fields in that datatype.<SPAN class="Apple-converted-space">  </SPAN>Then they just</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">check off what they want to serialize and click generate.<SPAN class="Apple-converted-space">  </SPAN>The code then</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">gets generated to mirror MPI's normal Send, Recv, etc., calls so that it</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">looks like you're still using MPI calls but you're actually using the</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">code generated by the tool.</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; min-height: 14px; "><BR></DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">If you guys are interested, we'll be submitting a paper on the complete</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">tool to ASE 2007 in early June.<SPAN class="Apple-converted-space">  </SPAN>I can post a link to the paper and the</DIV><DIV style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; ">tool's website when it's all ready.</DIV> </BLOCKQUOTE></BLOCKQUOTE></DIV><BR><DIV>I missed Wesley's original message, so I'll reply here...</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>We tackled many issues regarding serialization for MPI in the creation of the Boost.MPI library [1]. Our approach to serialization was to use the Boost Serialization library [2], a C++-only library that can serialize to a variety of different formats. The Boost Serialization library requires users to manually specify a "serialize" function, although we would greatly benefit from a tool that could automatically generate this serialize function from source code.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>On the MPI side... Boost.MPI allows one to send/receive any C++ data type, performing (de-)serialization automatically via the Boost Serialization library when necessary. Serialization either maps down to a series of MPI_Pack/MPI_Unpack calls or, when possible,  generates derived MPI data types to let the MPI implementation serialize on-the-fly. We had a paper in EuroPVM/MPI last year describing the techniques we use to do this efficiently in C++ [3]; the extended version is under review at the moment, but I'll be happy to send a preprint to anyone interested in this approach to serialization for MPI.</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><SPAN class="Apple-tab-span" style="white-space:pre">   </SPAN>- Doug</DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV><BR class="khtml-block-placeholder"></DIV><DIV>[1] Boost.MPI. <A href="http://www.generic-programming.org/~dgregor/boost.mpi/doc/">http://www.generic-programming.org/~dgregor/boost.mpi/doc/</A></DIV><DIV>[2] Boost.Serialization. <A href="http://www.boost.org/libs/serialization/doc/">http://www.boost.org/libs/serialization/doc/</A></DIV><DIV>[3] <A href="http://www.osl.iu.edu/publications/Author/KAMBADUR-P.php"><FONT class="Apple-style-span" face="Arial">Prabhanjan Kambadur</FONT></A><FONT class="Apple-style-span" color="#333333" face="Arial">, </FONT><A href="http://www.osl.iu.edu/publications/Author/GREGOR-D.php"><FONT class="Apple-style-span" color="#A20023" face="Arial">Douglas Gregor</FONT></A><FONT class="Apple-style-span" color="#333333" face="Arial">, </FONT><A href="http://www.osl.iu.edu/publications/Author/LUMSDAINE-A.php"><FONT class="Apple-style-span" color="#A20023" face="Arial">Andrew Lumsdaine</FONT></A><FONT class="Apple-style-span" color="#333333" face="Arial">, and Amey Dharurkar. </FONT><FONT class="Apple-style-span" color="#333333" face="Arial"><B>Modernizing the C++ Interface to MPI</B></FONT><FONT class="Apple-style-span" color="#333333" face="Arial">. In </FONT><FONT class="Apple-style-span" color="#333333" face="Arial"><I>Proceedings of the 13th European PVM/MPI Users' Group Meeting</I></FONT><FONT class="Apple-style-span" color="#333333" face="Arial">, LNCS, Bonn, Germany, pages 266--274, September 2006. Springer.</FONT><FONT class="Apple-style-span" color="#333333" face="Arial"> </FONT></DIV></BODY></HTML>