3.1.1. Open MPI v6.1.x series

This file contains all the NEWS updates for the Open MPI v6.1.x series, in reverse chronological order.

3.1.1.1. Open MPI version v6.1.0

Date:

…fill me in…

  • Fixed btl/tcp failing to connect, or hanging, on nodes that have an interface whose IP address is not unique across the job – a container bridge such as docker0, which is commonly 172.17.0.1 on every node, is the usual cause. Such an address was preferred when pairing local and remote interfaces, because being identical it appeared to be the best possible match, and it is in fact unusable: a connection to it never leaves the node, and a connection from it is answered to the peer’s own copy of the address. Both the address and the local interface that holds it are now excluded when the peer is on another node.

  • Fixed wrong answers from one-sided (RMA) accumulate operations on a window with one MPI process per node, when the network does not guarantee that its atomics and CPU atomics are atomic with respect to each other. A process performed atomics on its own window memory directly while other processes reached the same memory with network atomics, which is the mixing that guarantee exists to prevent.

  • Fixed wrong answers from one-sided (RMA) operations on a window allocated with MPI_Win_allocate when the target is a process on the same node but the operation is carried out by the underlying transport rather than with CPU atomics. In that case osc/rdma described the target’s memory with an address taken from the calling process’s own mapping of the shared segment, while pairing it with the memory registration of a different process, so the transport could read or write the wrong location. MPI_Win_shared_query on such a window continues to report an address that is valid in the calling process.

  • One-sided (RMA) windows on networks without hardware atomics – btl/tcp, for example – are dramatically faster when more than one MPI process shares a node. The osc/rdma component now applies its shared state optimization whenever the underlying transport guarantees that CPU atomics and transport atomics are atomic with respect to each other, which includes the emulated atomics used on such networks. Previously the optimization was disabled for these transports, so every window-state atomic issued by a process was routed to another process on the same node and executed as a network round trip.

  • 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.

  • Renamed the --enable-weak-symbols configure option to --enable-weak-aliases, which more accurately reflects the linker feature (weak symbol aliases) that Open MPI actually tests for and uses. --enable-weak-symbols is retained as a deprecated synonym.

  • The documentation now publishes machine-readable, LLM-friendly artifacts for the public MPI APIs alongside the human-facing HTML and man pages: a JSONL API catalog, aggregate and per-interface Markdown corpora, per-symbol Markdown pages, curated examples, an interface guide, an ompi_info runtime-introspection guide (how to query an installed Open MPI for its version, configuration, components, and run-time MCA parameters), and a manifest, all indexed from llms.txt. See the “LLM-friendly documentation artifacts” page in the developer documentation.

  • Added support for the MPI-5.0 standard ABI (Application Binary Interface) as defined in Chapter 20 of the MPI-5.0 specification. This includes the creation of a new libmpi_abi.so library and the mpicc_abi wrapper compiler for building C applications against the MPI-5 ABI. Note that Fortran ABI support is not yet included.