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 wrong answers from one-sided (RMA) operations on a window allocated with
MPI_Win_allocatewhen 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 caseosc/rdmadescribed 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_queryon 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. Theosc/rdmacomponent 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
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.Renamed the
--enable-weak-symbolsconfigure 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-symbolsis 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_inforuntime-introspection guide (how to query an installed Open MPI for its version, configuration, components, and run-time MCA parameters), and a manifest, all indexed fromllms.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.solibrary and thempicc_abiwrapper compiler for building C applications against the MPI-5 ABI. Note that Fortran ABI support is not yet included.