Hi Brian,
I think we're in agreement that iflush needs to be defined separately. I was thinking out loud (without really thinking that hard about it) that win_test might be usable to achieve iunlock or ifence, but this is nonsensical because the arguments are different across these functions. Win_test also only covers win_wait. To be complete, we should also consider MPI_Win_icomplete, and a few others. Here's a more exhaustive list:
MPI_Win_iflush
MPI_Win_iflush_all
MPI_Win_iflush_local
MPI_Win_iflush_local_all
MPI_Win_iunlock
MPI_Win_iunlock_all
MPI_Win_ifence
MPI_Win_icomplete
MPI_Win_iwait (to replace win_test, for completeness?)
This is a whole other can of worms, but in some cases, the functions that start an epoch can block (e.g. a lock operation when load/store is possible for the target). I don't know to what extent we want to look into nonblocking variants of those routines. We already have nonblocking fence in the list, which initiates an epoch.
~Jim.