Hi,
[...]
> > Placing a sync (i.e., the strongest Power barrier) accordingly would,
> > however,
> > still be insufficient for the second problem, as it would only fix the
> > reordering of read-read pairs by Worker 1 and the store atomicity issue from
> > Worker 0. But the writes on Worker 0 could still be reordered (problem
> > number
> > 2). One possible fix consists of placing a sync between the two writes on
> > Worker
> > 0, and an address dependency between the two reads on Worker 1. Clearly,
> > however, these are changes that cannot any longer be hidden behind the
> > ResetLatch/WaitLatch interface, but rather go in the code using these.
>
[...]
> However, your example is enough unlike the actual code that the
> conclusion you state following the word "clearly" isn't actually clear
> to me. According to latch.h, the correct method of using a latch is
> like this:
>
> * for (;;)
> * {
> * ResetLatch();
> * if (work to do)
> * Do Stuff();
> * WaitLatch();
> * }
>
> Meanwhile, anyone who is creating additional work to do should add the
> work to the queue and then set the latch.
> When writing the above statement, including the "clearly", we were possibly too much thinking of the above usage hint, which just uses ResetLatch and WaitLatch. As you say, ... > So it seems to me that we could potentially fix this by inserting > barriers at the end of ResetLatch and at the beginning of SetLatch and > WaitLatch. Then the latch has to get reset before we check whether > there's work to do; and we've got to finish checking for work before > we again try to wait for the latch. Similarly, any work that was in > progress before SetLatch was called will be forced to be committed to > memory before SetLatch does anything else. Adding that many barriers > might not be very good for performance but it seems OK from a > correctness point of view, unless I am missing something, which is > definitely possible. I'd appreciate any thoughts you have on this, as > this is clearly subtle and tricky to get exactly right. > ... placing another barrier in "SetLatch" could just do the trick. We will apply our tools to actually prove this and come back with the conclusive answer. Best, Michael
pgpYu5lX5GiTq.pgp
Description: PGP signature
