[Mpi3-rma] MPI-3 UNIFIED model clarification
balaji at mcs.anl.gov
Mon Jul 29 15:37:24 CDT 2013
On 07/29/2013 02:27 PM, Sur, Sayantan wrote:
>> Yes, doing a remote memory barrier using an active message is an option.
>> But I think the point is that any of these approaches adds more unnecessary
> I'm not clear as to for which option we can avoid overhead of the barrier.
> UBER_SUPER_UNIFIED: MPI_Win_flush is truly one sided and utilizes network remote completion.
> KIND_OF_UNIFIED: You need to have the memory barrier somewhere, so you will move it to MPI_Win_sync. A well-optimized RMA app will avoid unnecessary flushes and only do so when it intends updates to be visible to the remote side. I think in the end, the cost of the barrier will end up being equal, since a well optimized app will synchronize (local or remote) as infrequently as possible.
I'm not sure I follow your point here. For non-x86 to provide the
currently specified UNIFIED model, it has to do active-message based
remote memory barriers for every flush and unlock (even if the target
process is not planning to read the data). With KIND_OF_UNIFIED, I'm
saying that the user will need to WIN_SYNC, thus avoiding this overhead
in flush. MPI will do the memory barrier in WIN_SYNC, when the user
> I have a suspicion that KIND_OF_UNIFIED is going to end up being no
> different than SEPARATE. Although I haven't thought this angle
> through. It needs further clarification as to how KIND_OF_UNIFIED
> differs from UBER_SUPER_UNIFIED.
That was my first thought as well, but note that KIND_OF_UNIFIED is much
stronger (and almost identical to UNIFIED), when we are talking about
> " In the RMA unified model, public and private copies are identical and updates via put
> or accumulate calls are eventually observed by load operations without additional RMA
> I take "eventually" to mean locks/flushes. But it seems that not everyone shares that interpretation?
FLUSH will guarantee that the data is present in the remote public
memory. And UNIFIED states that public memory == private memory. So,
the user can read it directly without any additional MPI calls.
That's the broken part.
More information about the mpiwg-rma