3.5. MPI Functionality and Features
3.5.1. MPI Standard conformance
In the Open MPI v5.0.x series, all MPI-3.|mpi_standard_subversion| functionality is supported. Some MPI-4.0 functionality is supported, but not all of it.
As such, MPI_VERSION
is set to 3 and MPI_SUBVERSION
is set
to 1.
For historical reference:
MPI standards conformance |
Introduced in Open MPI version |
---|---|
MPI-2.0 |
Open MPI v1.2 |
MPI-2.1 |
Open MPI v1.3 |
MPI-3.0 |
Open MPI v1.8 |
MPI-3.1 |
Open MPI v2.0 |
3.5.2. Removed MPI APIs
Note that starting with Open MPI v4.0.0, prototypes for several
legacy MPI-1 symbols that were deleted in the MPI-3.0 specification
are no longer available by default in mpi.h
. Specifically,
several MPI-1 symbols were deprecated in the 1996 publishing of the
MPI-2.0 specification. These deprecated symbols were eventually
removed from the MPI-3.0 specification in
2012.
The symbols that now no longer appear by default in Open MPI’s
mpi.h
are:
MPI_Address
(replaced byMPI_Get_address
)MPI_Errhandler_create
(replaced byMPI_Comm_create_errhandler
)MPI_Errhandler_get
(replaced byMPI_Comm_get_errhandler
)MPI_Errhandler_set
(replaced byMPI_Comm_set_errhandler
)MPI_Type_extent
(replaced byMPI_Type_get_extent
)MPI_Type_hindexed
(replaced byMPI_Type_create_hindexed
)MPI_Type_hvector
(replaced byMPI_Type_create_hvector
)MPI_Type_lb
(replaced byMPI_Type_get_extent
)MPI_Type_struct
(replaced byMPI_Type_create_struct
)MPI_Type_ub
(replaced byMPI_Type_get_extent
)MPI_LB
(replaced byMPI_Type_create_resized
)MPI_UB
(replaced byMPI_Type_create_resized
)MPI_COMBINER_HINDEXED_INTEGER
MPI_COMBINER_HVECTOR_INTEGER
MPI_COMBINER_STRUCT_INTEGER
MPI_Handler_function
(replaced byMPI_Comm_errhandler_function
)
Although these symbols are no longer prototyped in mpi.h
, they
are still present in the MPI library in Open MPI v5.0.x. This
enables legacy MPI applications to link and run successfully with
Open MPI v5.0.x, even though they will fail to compile.
Warning
Future releases of Open MPI beyond the v5.0.x series may remove these symbols altogether.
Warning
The Open MPI team STRONGLY encourages all MPI application developers to stop using these constructs that were first deprecated over 20 years ago, and finally removed from the MPI specification in MPI-3.0 (in 2012).
Important
The “Removed MPI constructs” section contains examples of how to update legacy MPI applications using these deleted symbols to use the “new” symbols.
All that being said, if you are unable to immediately update your
application to stop using these legacy MPI-1 symbols, you can
re-enable them in mpi.h
by configuring Open MPI with the
--enable-mpi1-compatibility
flag.
3.5.3. Other MPI features
Rank reordering support is available using the TreeMatch library. It is activated for the graph and
dist_graph
communicator topologies.When using MPI deprecated functions, some compilers will emit warnings. For example:
shell$ cat deprecated_example.c #include <mpi.h> void foo(void) { MPI_Datatype type; MPI_Type_struct(1, NULL, NULL, NULL, &type); } shell$ mpicc -c deprecated_example.c deprecated_example.c: In function 'foo': deprecated_example.c:4: warning: 'MPI_Type_struct' is deprecated (declared at /opt/openmpi/include/mpi.h:1522) shell$
MPI_THREAD_MULTIPLE
is supported with some exceptions.The following PMLs support
MPI_THREAD_MULTIPLE
:cm
, when used with the following MTLs:ofi
(Libfabric)portals4
ob1
, when used with the following BTLs:self
sm
smcuda
tcp
ugni
usnic
ucx
Currently, MPI File operations are not thread safe even if MPI is initialized for
MPI_THREAD_MULTIPLE
support.MPI_REAL16
andMPI_COMPLEX32
are only supported on platforms where a portable C datatype can be found that matches the Fortran typeREAL*16
, both in size and bit representation.The “libompitrace” library is bundled in Open MPI and is installed by default (it can be disabled via the
--disable-libompitrace
flag). This library provides a simplistic tracing of select MPI function calls via the MPI profiling interface. Linking it in to your application via (e.g., via-lompitrace
) will automatically output to stderr when some MPI functions are invoked:shell$ cd examples/ shell$ mpicc hello_c.c -o hello_c -lompitrace shell$ mpirun -n 1 hello_c MPI_INIT: argc 1 Hello, world, I am 0 of 1 MPI_BARRIER[0]: comm MPI_COMM_WORLD MPI_FINALIZE[0] shell$
Keep in mind that the output from the trace library is going to
stderr
, so it may output in a slightly different order than thestdout
from your application.This library is being offered as a “proof of concept” / convenience from Open MPI. If there is interest, it is trivially easy to extend it to printf for other MPI functions. Pull requests on github.com would be greatly appreciated.