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_Count parameters).

  • 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 configure to 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-java configure 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_Status fields.

  • MPI-4.1 has deprecated the use of the Fortran mpif.h include file. Open MPI will now issue a warning when the file is included and the Fortran compiler supports the #warning directive.

  • 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_abi and libmpi_abi.

  • Improvements to collective operations:

    • Added new xhc collective component to optimize shared memory collective operations using XPMEM.

    • Added new acoll collective component optimizing single-node collective operations on AMD Zen-based processors.

    • Added new algorithms to optimize Alltoall and Alltoallv in the han component when XPMEM is available.

    • Introduced new algorithms and parameterizations for Reduce, Allgather, and Allreduce in the base collective component, and adjusted the tuned component to better utilize these collectives.

    • Added new JSON file format to tune the tuned collective component.

    • Extended the accelerator collective component to support more collective operations on device buffers.

  • MPI_T_category_get_events and MPI_T_category_get_num_events now validate their cat_index argument and return MPI_T_ERR_INVALID_INDEX for an out-of-range index, consistent with the other MPI_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 posix fbtl component sized its batch of concurrent aio_write calls from sysconf(_SC_AIO_MAX), which there reports the machine-wide kern.aiomax (90 by default) rather than the kern.aioprocmax a 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 new fbtl_posix_max_aio_reqs MCA parameter overrides the limit. A nonblocking operation the fbtl cannot post is now reported as MPI_ERR_IO; previously MPI_File_iwrite_all and MPI_Wait both returned MPI_SUCCESS for a write that never reached the file.

  • Reporting an error for a failed nonblocking file operation no longer crashes the process. MPI_Wait and MPI_Test reach 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_set now accepts a zero-length (empty) value string. It previously raised MPI_ERR_INFO_VALUE for 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 the mpi_memory_alloc_kinds info key. Empty keys remain invalid.

  • Partitioned communication fixes:

    • MPI_Parrived now returns flag = true for a null request (MPI_REQUEST_NULL) and for an inactive request, as required by MPI-5.0 section 4.2.2. It previously raised MPI_ERR_REQUEST for a null request and returned flag = false for a partitioned receive request that had never been started.

    • MPI_Psend_init and MPI_Precv_init now accept MPI_PROC_NULL as the peer rank, per MPI-5.0 section 3.10. Such a request completes as soon as it is started, MPI_Pready on it has no effect, and MPI_Parrived reports every partition as arrived. Previously, MPI_PROC_NULL was 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 reported hwloc:// resource keys can also be used with MPI_Comm_split_type() for hardware- and resource-guided communicator creation. Thanks to Musawer Ahmad Saqif for the contribution.