-
Notifications
You must be signed in to change notification settings - Fork 61
Description
Question
The documentation for nvshmem.core.rma.quiet states:
Note that this function will return when local (the PE this is called from) operations are completed. Remote operations may not yet be. Other synchronizations are required
To me this implies that nvshmem.core.rma.quiet only ensures the completion of the local component of RMA operations, not the remote component. This is different from the OpenSHMEM spec's shmem_quiet and also (in my reading) the NVSHMEM C API's nvshmem_quiet, where a quiet ensures remote completion.
More concretely, taking put as an example, there are two important synchronization points:
- After "local completion," the user is free to modify the local source buffer without affecting the put. However, remote completion is not guaranteed. "Local completion" is guaranteed after
shmem_putreturns in OpenSHMEM, but not aftershmem_put_nbireturns. - After "remote completion," the put is complete and the remote data is visible to all processes. This is guaranteed after
shmem_quietreturns for bothshmem_putorshmem_put_nbioperations (and indeed all outstanding operations).
The documentation sounds to me like nvshmem.core.rma.quiet only gives the first guarantee. However, this seems unlikely, since I'm assuming nvshmem.core.rma.quiet just calls nvshmem_quiet? My assumption is that local completion is guaranteed after stream synchronization and remote completion is guaranteed by a quiet?