What Does One-Sided Mean?
One-sided communication functions provide an interface to Remote Memory Access (RMA) communication methods that allow a single MPI process to initiate communication activity on both the sending and receiving sides. Regular send/receive communications require matching MPI_Send and MPI_Recv operations to be posted by the appropriate processes, meaning that each transfer must be anticipated, and the parameters must be mutually agreed on.
For cases where the data transfer events happen irregularly but follow some general pattern, RMA may allow processes to avoid making costly barrier-type calls or polling explicitly for updates from other processes. Compared to the usual send/receive model, this can help to reduce the synchronization overhead, i.e., the delay involved in waiting for the communicating processes to reach a state where they are ready to do the data transfer.
In the MPI Point-to-Point topic, we discussed how communicating with MPI involves system overhead as well as synchronization overhead. System overhead results from the actual time it takes to move the data from one process to another. RMA can help here too, as it allows MPI implementers to take advantage of low-latency, fast communication paths that are available on some platforms where one process can directly access the memory of another. The Intel Omni-Path (OPA) fabric available on Stampede2 and the InfiniBand fabric on Frontera are examples of fast communication paths that provide native hardware support for RMA operations.