Reading the new proposal made me think about multiple windows (though
the concern applies to the old proposal too). Here are two cases:
1) There are two windows that do not overlap, they touch at the end of
one/beginning of the other, and the edge is not word/cache aligned.
Thus, they look like:
----------------- -----------------
| window 1 || window 2 |
----------------- -----------------
| | | | | | Cache/word alignments
window 1 is local and window 2 is public. You store to the last int
in window 1 to the local copy. You put to the first int in window 2
to the public copy. Now you do a barrier (or Window_out on window 1).
It seems that you can't simply flush the cache or even the cache line
associated with the end of window 1. This would wipe out the changes
made by the put in window 2. The solution on p. 297 Case 2. options 2
& 3 proposes the cache flush to sync the copies. Does this example
imply you have to be more careful?
***********
The flush problem is the same problem as that of a write outside the window
onto a word that overlaps the window boundary. The solution is the same:
Window 2 has a separate, "public" copy of the overlaping cache line, and that
public copy is accessed by the put. Replace in the current document "word" by
cache line.
***********
2) You have two windows that overlap. One window is made public and
one private. This clearly violates the need to only access the public
or private copy of a region. However, it does not violate the rules
on any single window. Did we forbit this?
**************
We say: "It is forbidden to have concurrent public epochs for both windows".
We should say: "it is forbidden to have a public epoch for one window
concurrent with a private epoch for the other window". Thanks for the
correction.
*************
Steve