[mpiwg-rma] Questions about multiple overlapped windows
Jeff Hammond
jeff.science at gmail.com
Mon Dec 8 09:32:45 CST 2014
On Mon, Dec 8, 2014 at 12:00 AM, Tatsuya Abe <abetatsuya at gmail.com> wrote:
> Hi Jeff,
>
> Thank you so much for the reply.
>
>>A good example is using WIN_ALLOCATE_SHARED to create a shared memory
>>window, then passing the resulting buffer into WIN_CREATE. This
>>enables a window to support both intranode+interprocess load-store and
>>internode RMA.
>
> Doesn't MPI_Win_allocate_shared support internode RMA, i.e., when I
> create a window by using MPI_Win_allocate_shared, cannot I call
> MPI_Put/MPI_Get for the window? I haven't found any description about
> it in MPI 3.0 yet.
WIN_ALLOCATE_SHARED is only valid on an MPI communicator corresponding
to a shared memory domain, so no, it does not enable internode RMA
unless you can do load-store between nodes.
And yes, you can still use RMA function calls to access data in a
shared memory window. This is essential, for example, if you want to
use atomics, since some languages (e.g. C99) do not have a portable
abstraction for these.
> I am a little confused. Could you let me ask you more details?
>
> 1. Do you mean that another window must be created by MPI_Win_create,
> in order to use MPI_Put/MPI_Get for a window created by
> MPI_Win_allocate_shared? Is this why multiple windows are allowed
> to be overlapped?
Yes, but only for internode access, as noted above.
> 2. Do you mean that the multiple overlapped windows (from
> MPI_Win_allocate_shared and MPI_Win_create) become unnecessary in
> this example if your ticket #397 passes?
My ticket would allow one to use MPI_WIN_ALLOCATE to get both
intranode shared memory and internode RMA access.
Jeff
> Tatsuya
>
>
>
> Jeff Hammond <jeff.science at gmail.com> wrote:
>>On Sun, Dec 7, 2014 at 4:57 PM, Tatsuya Abe <abetatsuya at gmail.com> wrote:
>>> Dear all,
>>>
>>> I am interested in memory consistency models, and studying program
>>> verification with memory consistency models. I started to read MPI
>>> 3.0 document (and Dr. Torsten Hoefler's tutorial slides).
>>> http://www.eurompi2014.org/tutorials/hoefler-advanced-mpi-eurompi14.pdf
>>>
>>> I am wondering if you could give replies to my questions.
>>> I have two questions about multiple overlapped windows:
>>>
>>> 1. (Assume that I create two overlapped windows.) What happens if I
>>> do MPI_Put through one window and MPI_Get through the other window?
>>
>>It depends entirely on the synchronization epochs you use and whether
>>the memory model provided is UNIFIED or SEPARATE.
>>
>>> 2. I am wondering what are multiple overlapped windows for.
>>
>>To work around obnoxious shortcomings of MPI RMA.
>>
>>> 1. I can find no description about the first question in MPI 3.0
>>> document.
>>>
>>> I found Torsten's slides (credit by RMA Working Group, MPI Forum),
>>> which explicitly showed relations between operations (Load, Store,
>>> Get, Put, and Acc) on pp.82--84. But, it seems an explanation
>>> when exactly one window is created,
>>>
>>> For example, page 83 of the slide seems to claim that Put and
>>> Get are allowed when they are not NOVL (non-overlapped)
>>> through one window in separate semantics.
>>>
>>> One of my questions is ``are Put and Get allowed when they are
>>> not NOVL (non-overlapped) through *two* *overlapped* windows
>>> in separate semantics?'' I would like to get such table about
>>> multiple windows.
>>
>>Within the unified model, one can reason about overlapping windows by
>>recognizing that the private windows of the overlapping windows are
>>all the same and thus when one synchronizes the public and private
>>windows of each window with WIN_SYNC, then all of the public windows
>>are the same as well.
>>
>>> 2. I can find no example about multiple overlapped windows except
>>> Figure 11.1 in MPI 3.0 document. Also, I suspect that Put and Get
>>> are allowed when they are not NOVL (non-overlapped) through two
>>> overlapped windows in separate semantics.
>>>
>>> I cannot come up with any useful example code. Why are multiple
>>> *and* overlapped windows allowed to be active?
>>
>>A good example is using WIN_ALLOCATE_SHARED to create a shared memory
>>window, then passing the resulting buffer into WIN_CREATE. This
>>enables a window to support both intranode+interprocess load-store and
>>internode RMA. It is useful if one wants to reproduce the behavior of
>>e.g. ARMCI in implementing Global Arrays.
>>
>>The aforementioned motivation will disappear if my ticket
>>https://svn.mpi-forum.org/trac/mpi-forum-web/ticket/397 is passed and
>>part of MPI-4.
>>
>>Another reason is to allow ordered and unordered semantics. The
>>option to control this happens during window construction and cannot
>>be changed. If one wants one semantic (unordered) for performance and
>>another (ordered) for correctness, then one needs two windows, one for
>>each.
>>
>>Jeff
>>
>>--
>>Jeff Hammond
>>jeff.science at gmail.com
>>http://jeffhammond.github.io/
--
Jeff Hammond
jeff.science at gmail.com
http://jeffhammond.github.io/
More information about the mpiwg-rma
mailing list