1
votes

I am using MPI_Raccumulate function which is one-sided communication from source to destination with pre-defined aggregation function.

I want to check whether all the MPI_Raccumulate call has finished (sender sent the data and receiver received the data successfully) at the end of the program. MPI_Wait, however, does not seem to be the solution to this problem; it only waits for checking whether the source buffer is updatable or not (available to user).

Is there any way (1) to check whether A specific MPI-one-sided communication call has completely finished (in sender and receiver side)? (2) to confirm that there is no send/receive MPI requests in each processor?

My application program should use one-sided communication but need to confirm that there is no more communications at the end of a specific task.

thanks

1
I don't understand your send-Recv question. Are you using wildcards?Jeff Hammond

1 Answers

1
votes

Completing RMA requests only ensures local completion and thus buffer reuse. Remote completion requires one of:

  • MPI_Win_complete, in the PSCW usage model
  • MPI_Win_fence, in the BSP usage model
  • MPI_Win_unlock(_all) or MPI_Win_flush(_all) in the passive-target usage model.

You probably don't want to use request-based RMA. The regular functions are sufficient for nearly all usage models. The only request RMA operation that is obviously useful is MPI_Get (Or MPI_Get_accumulate with MPI_NO_OP, which is the atomic equivalent of MPI_Get). And I say this as the person most responsible for these features being part of MPI-3.