3.1.2. Open MPI v6.0.x series
This file contains all the NEWS updates for the Open MPI v6.0.x series, in reverse chronological order.
3.1.2.1. Open MPI version v6.0.0
- Date:
…fill me in…
Added support for the MPI-4.0 embiggened APIs (i.e., functions with
MPI_Countparameters).Implemented the MPI_T events interface (MPI-5.0 section 15.3.8): event sources and types, event handles (including events bound to a specific MPI object), callbacks honoring the callback-safety levels, and dropped-event handlers, plus a set of built-in event producers (MPI initialization/finalization for both the world and session models, communicator and RMA window lifecycle, communicator naming, error-handler invocations, and OS-level memory release). List the registered sources and event types with
ompi_info --event.Fix build system and some internal code to support compiler link-time optimization (LTO).
Fixed
configureto emit correct results when using an Autoconf cache file (e.g.,configure -C). Previously, several C compiler and atomics results were emitted incorrectly (or omitted entirely) when they were read back from a cache file, which broke the subsequent build.Open MPI now requires a C11-compliant compiler to build.
Open MPI now requires Python >= 3.6 to build.
Open MPI has always required Perl 5 to build (and still does); our Perl scripts are slowly being converted to Python.
Note
Open MPI only requires Python >= 3.6 and Perl 5 to build itself. It does not require Python or Perl to build or run Open MPI or OSHMEM applications.
Removed the ROMIO package. All MPI-IO functionality is now delivered through the Open MPI internal “OMPIO” implementation (which has been the default for quite a while, anyway).
Removed the Java MPI bindings and the
--enable-mpi-javaconfigure option. These bindings were experimental, were never part of the MPI standard, and are no longer supported.Improved OMPIO
MPI_File_get_info()reporting so it returns supported file hints that OMPIO is actually using, including component-owned hints for selected OMPIO subcomponents.Added support for MPI-4.1 functions to access and update
MPI_Statusfields.MPI-4.1 has deprecated the use of the Fortran
mpif.hinclude file. Open MPI will now issue a warning when the file is included and the Fortran compiler supports the#warningdirective.Added support for the MPI-4.1 memory allocation kind info object and values introduced in the MPI Memory Allocation Kinds side-document.
Added support for Intel Ponte Vecchio GPUs.
Extended the functionality of the accelerator framework to support intra-node device-to-device transfers for AMD and NVIDIA GPUs (independent of UCX or Libfabric).
Added support for MPI sessions when using UCX.
Added support for MPI-4.1
MPI_REQUEST_GET_STATUS_[ALL|ANY_SOME]functions.Added support for building C MPI applications against the MPI-5.0 standard ABI via
mpicc_abiandlibmpi_abi.Improvements to collective operations:
Added new
xhccollective component to optimize shared memory collective operations using XPMEM.Added new
acollcollective component optimizing single-node collective operations on AMD Zen-based processors.Added new algorithms to optimize Alltoall and Alltoallv in the
hancomponent when XPMEM is available.Introduced new algorithms and parameterizations for Reduce, Allgather, and Allreduce in the base collective component, and adjusted the
tunedcomponent to better utilize these collectives.Added new JSON file format to tune the
tunedcollective component.Extended the
acceleratorcollective component to support more collective operations on device buffers.
MPI_T_category_get_eventsandMPI_T_category_get_num_eventsnow validate theircat_indexargument and returnMPI_T_ERR_INVALID_INDEXfor an out-of-range index, consistent with the otherMPI_T_category_get_*query functions.Nonblocking file I/O no longer loses data when the operating system’s asynchronous I/O queue fills, which on macOS it readily does: the
posixfbtlcomponent sized its batch of concurrentaio_writecalls fromsysconf(_SC_AIO_MAX), which there reports the machine-widekern.aiomax(90 by default) rather than thekern.aioprocmaxa single process is held to (16). The component now bounds the batch by the per-process limit, defers requests the queue will not accept instead of discarding them, and reaps the operations it has posted before releasing their control blocks – an unreaped operation used to cost the process a queue slot permanently, so one refusal disabled nonblocking file I/O for the rest of its life. The newfbtl_posix_max_aio_reqsMCA parameter overrides the limit. A nonblocking operation thefbtlcannot post is now reported asMPI_ERR_IO; previouslyMPI_File_iwrite_allandMPI_Waitboth returnedMPI_SUCCESSfor a write that never reached the file.Reporting an error for a failed nonblocking file operation no longer crashes the process.
MPI_WaitandMPI_Testreach a file’s error handler through the request, and a nonblocking file request did not record which file it came from, so invoking the error handler dereferenced a null pointer.MPI_Info_setnow accepts a zero-length (empty) value string. It previously raisedMPI_ERR_INFO_VALUEfor an empty value, but MPI-5.0 chapter 10 only limits the maximum length of an info value, and gives the empty string a defined meaning for thempi_memory_alloc_kindsinfo key. Empty keys remain invalid.Partitioned communication fixes:
MPI_Parrivednow returnsflag = truefor a null request (MPI_REQUEST_NULL) and for an inactive request, as required by MPI-5.0 section 4.2.2. It previously raisedMPI_ERR_REQUESTfor a null request and returnedflag = falsefor a partitioned receive request that had never been started.MPI_Psend_initandMPI_Precv_initnow acceptMPI_PROC_NULLas the peer rank, per MPI-5.0 section 3.10. Such a request completes as soon as it is started,MPI_Preadyon it has no effect, andMPI_Parrivedreports every partition as arrived. Previously,MPI_PROC_NULLwas passed down as if it were a real peer rank, reading outside the communicator’s process array.Freeing a partitioned communication request that was never started no longer leaves its internal setup receive posted. Such a stale receive could consume the setup message of the next partitioned operation using the same communicator, peer, and tag, which then never completed.
Implemented
MPI_Get_hw_resource_info()using hwloc. The returned info object now reports whether the calling process is restricted to individual NUMA nodes, packages, caches, cores, and processing units. The reportedhwloc://resource keys can also be used withMPI_Comm_split_type()for hardware- and resource-guided communicator creation. Thanks to Musawer Ahmad Saqif for the contribution.