[mpiwg-tools] Mini example of single tool working with multiple MPI implementations
legendre1 at llnl.gov
Thu Oct 22 12:34:46 CDT 2015
At the end of the call, Jeff asked about a simple example that illustrates
building a tool with QMPI that works with multiple MPI implementations.
I've attached a tarball that illustrates what I was picturing.
This example builds a pair of libraries, libfakeopenmpi.so and
libfakempich.so, which each export "mpisend" functions with different
signatures as well as a pair of fake apps, app_openmpi and app_mpich, that
use each library. It also builds a single libtool.so, which contains
wrapper functions for each mpisend and dynamically chooses which one is
Note that the tool library still has files built against each MPI
implementation, but produces a single library that works with either
On the phone I speculated that you'd need the callback registration
functions to be ABI compatible across all MPI implementations, but this
didn't turn up being necessary. You can get away with only the MPI
identification function having a standard ABI. In this example I called
the function get_mpi_implementation().
It also turned up being very convenient if the MPI header exported the
return value of get_mpi_implementation() though a #define (which I called
MPI_IMPL). This allowed for an easy runtime test of whether the a tool
implementation was compiled for the running MPI.
Also, On the phone I speculated that getting per-compiler tools would be
difficult. You actually could solve part of the problem by including a
compiler name and version in the MPI_IMPL #define--most compilers have
preprocessor macros that exports that info. Though this still wouldn't
solve any tool incompatibilities with runtime libraries like libstdc++.so.
-------------- next part --------------
A non-text attachment was scrubbed...
Size: 30720 bytes
More information about the mpiwg-tools