[LLVMdev] LLVM IR atomics: difference between unordered and monotonic?

Jeffrey Yasskin jyasskin at googlers.com
Fri Jul 13 12:12:52 PDT 2012


If you understand the difference between the Java and C++ memory
model, "Unordered" is how to represent ordinary Java variables, while
"Monotonic" is how to represent memory_order_relaxed operations on
C++11 atomics.

If you don't understand the Java and C++ memory models, read
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2480.html and
http://unladen-swallow.googlecode.com/files/journal.pdf (why is there
no better location for this file?).

On Fri, Jul 13, 2012 at 11:48 AM, Lei Zhao <leizhao833 at gmail.com> wrote:
> Hi All,
>
>   I am reading about LLVM IR atomics (http://llvm.org/docs/Atomics.html) and
> get confused about the difference between "Unordered" and "Monotonic". In
> particular, I am not sure I understand the statement of "It essentially
> guarantees that if you take all the operations affecting a specific address,
> a consistent ordering exists.". For me, it means that for the following
> example, if {r1,r2} = {1,2}, {r3,r4} = {2,1} is not allowed under
> "Monotonic" but allowed under "Unordered". Is this all how "Monotonic" is
> stronger than "Unordered"? If not, can anyone provide an example where other
> behaviors are allowed under "Unordered" but not "Monotonic"?
>
>
> ----------------------------------------------------------------------------------------
> T1            T2               T3             T4
> W(X)=1     W(X)=2        r1=R(X)     r3=R(X)
>                                    r2=R(X)     r4=R(X)
>
> * Legend: four threads run in parallel; W(X)/R(X) meaning atomic write/read
> of X.
> ----------------------------------------------------------------------------------------
>
> Thank you.
>
> - Lei
>
> _______________________________________________
> LLVM Developers mailing list
> LLVMdev at cs.uiuc.edu         http://llvm.cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/llvmdev
>



More information about the llvm-dev mailing list