10 mpi_use_libelan_sub, 10 mpich object compatibility, Section 8.10) – HP XC System 2.x Software User Manual
Page 122
% export MPI_USE_LIBELAN=0
8.9.10 MPI_USE_LIBELAN_SUB
The use of Elan’s native collective operations may be extended to include communicators which
are smaller than
MPI_COMM_WORLD
by setting the
MPI_USE_LIBELAN_SUB
environment
variable to “
TRUE
”. By default, this functionality is disabled due to the fact that
libelan
memory resources are consumed and may eventually cause run-time failures when too many
sub-communicators are created. When set to
TRUE
, the number of sub-communicators that can
be simultaneously created is limited to 10. This limit can be changed to any desirable value by
setting the variable to a positive integer larger than 0.
% export MPI_USE_LIBELAN_USE=5
8.10 MPICH Object Compatibility
The MPI standard specifies the function prototypes for the MPI functions, but does not specify
the types of the MPI opaque objects like communicators or the values of the MPI constants.
Hence an object file compiled using one vendor’s MPI will generally not function correctly if
linked against another vendor’s MPI library.
There are some cases where such compatibility would be desirable. For instance a third-party
tool such as Vampir might only be available using the MPICH interface.
To allow such compatibility, HP-MPI now includes a layer of MPICH wrappers which provides
an interface identical to MPICH 1.2.5, and translates these calls into the corresponding HP-MPI
interface. This MPICH compatibility interface is only provided for functions defined in MPICH
1.2.5 and cannot be used by an application which calls functions outside the scope of MPICH
1.2.5.
HP-MPI can be used in MPICH mode by compiling using
mpicc.mpich
and running with
mpirun.mpich
. The compiler script
mpicc.mpich
uses an include file which defines the
interfaces the same as MPICH 1.2.5, and at link time it links against
libmpich.so
which is
the set of wrappers defining MPICH 1.2.5 compatible entry points for the MPI functions. The
mpirun.mpich
takes the same arguments as the traditional HP-MPI
mpirun
command, but
sets LD_LIBRARY_PATH so that
libmpich.so
is found.
An example of using a program with Vampir:
% $MPI_ROOT/bin/mpicc.mpich -o prog.x $MPI_ROOT/help
/communicator.c \ -L/path/to/vampir/lib -lVT -lpthread -lm
% $MPI_ROOT/bin/mpirun.mpich -np 2 ./prog.x
Here, the program
communicator.c
is being compiled with MPICH compatible interfaces
and is being linked against Vampir’s
libVT
first from the command line option, followed
by HP-MPI’s
libmpich.so
then
libmpi.so
which are added by the
mpicc.mpich
compiler wrapper script. Thus
libVT
sees only the MPICH compatible interface to HP-MPI.
In general, object files built with HP-MPI’s MPICH mode can be used in an MPICH application,
and conversely object files built under MPICH can be linked into an HP-MPI application using
MPICH mode. However using MPICH compatibility mode to produce a single executable to
run under both MPICH and HP-MPI will be more problematic and is not advised.
communicator.c
could be compiled under HP-MPI MPICH compatibility mode as:
% export MPI_ROOT=/opt/hpmpi%
$MPI_ROOT/bin/mpicc.mpich -o prog.x $MPI_ROOT
/help/communicator.c
8-12
Using HP-MPI