Recall that RMA actions utilize the following fundamental process:

  1. Globally initialize a window for communication
  2. Start an RMA epoch (synchronization)
  3. Perform communication calls as desired
  4. Stop an RMA epoch (synchronization)
  5. Free window and any other resources

This topic addresses the communication phase. RMA is provided through three different communication calls: MPI_Put (remote write), MPI_Get (remote read), and MPI_Accumulate (remote update). All of these operations are non-blocking, which means that the call initiates the transfer, but the transfer may begin or continue after the call returns. A synchronization call is required to ensure that the transfer has been completed. This implies that there are restrictions on how these communication calls may be overlapped in order to guarantee correct data handling.

For an MPI_Get call, which transfers data from target memory to caller memory, the retrieved buffer should not be accessed until the transfer has completed, i.e., after a synchronization call. Likewise, for MPI_Put and MPI_Accumulate, the caller's communication buffer should not be updated until the transfer has been completed. The rules are, therefore, the same as those associated with non-blocking point-to-point calls. In both situations, the programmer needs to verify when it is safe to use or modify buffers.

 
©   Cornell University  |  Center for Advanced Computing  |  Copyright Statement  |  Inclusivity Statement