<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body class="">
<div>Hello Jean-Baptiste,</div>
<div><br>
</div>
<div>thanks for the fast answer. With the pmpi.h I mean a file like mpi.h but only containing the PMPI_ Interface. As you suggested I might try to create a full wrapper myself. I took a look on the wi4mpi project and there approach seems to create there own
 interface aka. mpi.h and then wrap this to the intel MPI or OpenMPI implementation. Due to this approach, they know the data types and can generate the interface.</div>
<div><br>
</div>
<div>In my library I wanted to use a light wight wrapper. That is I wanted to use the original data types. With this approach I currently have structures like:</div>
<div><br>
</div>
<div>struct AMPI_Comm {</div>
<div>// my own data;</div>
<div>MPI_Comm comm; // the original object</div>
<div>};</div>
<div><br>
</div>
<div>I can then simply call the pmpi functions with the stored original object. </div>
<div>If I have a wrapper such that there is a PMPI_Comm object available, I could do the following:</div>
<div>
<div>struct MPI_Comm {</div>
<div>// my own data;</div>
<div>PMPI_Comm comm; // the original object</div>
<div>};</div>
<div><br>
</div>
</div>
<div>If the wrapper should use the same types from a general mpi.h, then I do not know the types and would need to declare something like:</div>
<div><br>
</div>
<div>hidden_mpi.c</div>
<div>#include <mpi.h></div>
<div>decltype(MPI_COMM_WORLD) PMPI_COMM_WORLD = MPI_COMM_WORLD;</div>
<div><br>
</div>
<div>and then I need to use PMPI_COMM_WORLD in my library and I can generate a hmpi.h wich contains lines like:</div>
<div>#define MPI_COMM_WORLD PMPI_COMM_WORLD</div>
<div><br>
</div>
<div>Which could be included by the user. But in order use PMPI_* in my library, I need to specify the symbol in a header file for which I need the type. In order to get the type I need to include mpi.h which will define MPI_COMM_WORLD and I have a name clash.
</div>
<div><br>
</div>
<div>So unfortunately I see no way in providing a wrapper without writing a complete MPI Interface, which I would like to avoid. I might be able to use the wi4mpi Project and use there interface as a base for my implementation, which would add a dependency
 to my project.</div>
<div><br>
</div>
<div>A third and very ugly option would be, that I define all my types as void* in the interface for the user. But this disables type checking and I still would need to wrap from void* to references of my types.
</div>
<div><br>
</div>
<div>So I might just stay in my AMPI namespace and provide a macro for the user to either call regular mpi functions or my wrapper functions.</div>
<div><br>
</div>
<div>Cheers</div>
<div><br>
</div>
<div>Max</div>
<div><br>
</div>
<div>On Wed, 2017-10-04 at 11:00 +0200, Jean-Baptiste BESNARD wrote:</div>
<blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex">
<div class="">Dear Max,</div>
<div class=""><br class="">
</div>
<div class="">I’m not sure I completely understand what you mean by a « pmpi.h » however I may have some initial elements below.</div>
<div class=""><br class="">
</div>
<div class="">The PMPI interface is currently targeting MPI functions only and indeed some of the values you’ll find in your executable will be compile time constants.</div>
<div class="">In fact, most MPI types/Constants are implementation dependent, there is no unified ABI.</div>
<div class=""><br class="">
</div>
<div class="">
<div class="">Nonetheless, you might be able to interpret them in your wrapper library in order to have them « rerouted » to your target implementation.</div>
</div>
<div class="">I mean, knowing the value of MPI_COMM_WORLD you could rewrite it to be MPI_COMM_WORLD2. </div>
<div class="">And for sure you wont’t find a PMPI_COMM_WORLD.</div>
<div class=""><br class="">
</div>
<div class="">I can help on writing a wrapper for the whole PMPI interface. See my repo here: <a href="https://github.com/besnardjb/mpi-snippets" class="">https://github.com/besnardjb/mpi-snippets</a></div>
<div class="">There is a simple python script generating VIM snippets for MPI from JSON specs, it can easily be converted to a script generating the whole MPI interface.</div>
<div class=""><br class="">
</div>
<div class="">Eventually, an approach close to what you want to do might be <a href="https://github.com/cea-hpc/wi4mpi" class="">https://github.com/cea-hpc/wi4mpi</a> which operates this systematic handler conversion between MPI flavors, but this clearly involves
 some rewriting.</div>
<div class=""><br class="">
</div>
<div class="">Hope this helps.</div>
<div class=""><br class="">
</div>
<div class="">Regards,</div>
<div class=""><br class="">
</div>
<div class="">Jean-Baptiste.</div>
<br class="">
<div>
<blockquote type="cite" style="margin:0 0 0 .8ex; border-left:2px #729fcf solid;padding-left:1ex">
<div class="">Le 4 oct. 2017 à 10:35, Max Sagebaum <<a href="mailto:max.sagebaum@scicomp.uni-kl.de" class="">max.sagebaum@scicomp.uni-kl.de</a>> a écrit :</div>
<div class="">
<div class="">
<div class=""><span class="">
<pre class=""><div style="font-family: Cantarell; white-space: normal;" class="">Hello @ all,</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">my question is concerning the PMPI specification. I hope the list is the correct place to ask.</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">I want to write a complete wrapper for MPI. That is every define, typedef and function will be wrapped and might be completely changed. Currently I prefixed everything with AMPI_ such that no name clashes exist. But the user would need to rename every occurrence of MPI_ with AMPI_</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">I would now like to use the PMPI definition of MPI to define my wrappers as the MPI version which then use the PMPI definitions. Unfortunately I could not find tutorials for a complete wrapper.</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">As an example take MPI_COMM_WORLD. I made a grep on the openmpi installation on my linux machine for PMPI_COMM_WORLD but the result was empty. The definition of MPI_COMM_WORLD was </div><div style="font-family: Cantarell; white-space: normal;" class="">#define MPI_COMM_WORLD OMPI_PREDEFINED_GLOBAL( MPI_Comm, ompi_mpi_comm_world)</div><div style="font-family: Cantarell; white-space: normal;" class="">without any chance to switch to PMPI_COMM_WORLD as a predefined macro.</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">I also checked the newest source tarball of openmpi and I could not find anything for PMPI_COMM_WORLD there.</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">In the mpi 3.0 standard on page 555 in section 14.2.1 the requirements are just listed for functions. Was the definition of the PMPI_ supplements for defines, types etc. never discussed?</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">I would have expected, that I can just include a pmpi.h and then I would have all the PMPI_ symbols without the MPI symbols available.</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">Do you know of any way I could make my idea work?</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><div style="font-family: Cantarell; white-space: normal;" class="">Cheers</div><div style="font-family: Cantarell; white-space: normal;" class=""><br class=""></div><pre class=""><span style="font-family: Cantarell; white-space: normal;" class="">Max</span></pre><pre class=""><br class=""></pre><pre class="">-- <br class=""></pre>Max Sagebaum

Chair for Scientific Computing,
TU Kaiserslautern,
Bldg/Geb 34, Paul-Ehrlich-Strasse,
67663 Kaiserslautern, Germany

Phone: +49 (0)631 205 5638
Fax:   +49 (0)631 205 3056
Email: <a href="mailto:max.sagebaum@scicomp.uni-kl.de" class="">max.sagebaum@scicomp.uni-kl.de</a>
URL:   <a href="http://www.scicomp.uni-kl.de" class="">www.scicomp.uni-kl.de</a>





</pre>
</span></div>
</div>
_______________________________________________<br class="">
mpiwg-tools mailing list<br class="">
<a href="mailto:mpiwg-tools@lists.mpi-forum.org" class="">mpiwg-tools@lists.mpi-forum.org</a><br class="">
https://lists.mpi-forum.org/mailman/listinfo/mpiwg-tools</div>
</blockquote>
</div>
<br class="">
<pre>_______________________________________________
mpiwg-tools mailing list
<a href="mailto:mpiwg-tools@lists.mpi-forum.org">mpiwg-tools@lists.mpi-forum.org</a>
<a href="https://lists.mpi-forum.org/mailman/listinfo/mpiwg-tools">https://lists.mpi-forum.org/mailman/listinfo/mpiwg-tools</a></pre>
</blockquote>
<div><span>
<pre><pre>-- <br></pre>Max Sagebaum

Chair for Scientific Computing,
TU Kaiserslautern,
Bldg/Geb 34, Paul-Ehrlich-Strasse,
67663 Kaiserslautern, Germany

Phone: +49 (0)631 205 5638
Fax:   +49 (0)631 205 3056
Email: max.sagebaum@scicomp.uni-kl.de
URL:   www.scicomp.uni-kl.de





</pre>
</span></div>
</body>
</html>