Open MPI logo

Open MPI Development Mailing List Archives

  |   Home   |   Support   |   FAQ   |   all Development mailing list

From: Gleb Natapov (glebn_at_[hidden])
Date: 2007-03-06 06:26:18


On Tue, Mar 06, 2007 at 12:13:16PM +0100, Bert Wesarg wrote:
> Gleb Natapov wrote:
> > On Tue, Mar 06, 2007 at 11:24:06AM +0100, Bert Wesarg wrote:
> >> Hello,
> >>
> >> Gleb Natapov wrote:
> >>> If it does this after opal_atomic_lock() (which is explicit memory
> >>> barrier) then it is broken.
> >> Than, gcc 4.1.1 on the amd64 architecture is broken:
> > And can you repeat the test please, but make "test" variable to be global
> > to tell compiler that it can be actually accessed by more then one
> > thread.
> >
>
> ahh, now both produce nearly the same code.
>
> but who hurts it to declare the variable volatile?
>
The disadvantage of using volatile is that compiler will produce
inefficient code for every access to a variable and not only specific
access that you care about, so it is better to do proper memory barrier
in places where ordering is important and let compiler optimize all
other cases. But what is even more important is that in most cases
volatile is not enough. CPU may reorder accesses to memory and volatile
doesn't help, so volatile is not a replacement for memory barriers.
You can find Linus rants about volatile usage in LKML archives for
entertainment reading. Volatile is overused in Open MPI anyway.

> Bert

> --- double_check.s 2007-03-06 12:07:12.103478512 +0100
> +++ double_check_volatile.s 2007-03-06 12:06:20.675315485 +0100
> @@ -1,4 +1,4 @@
> - .file "double_check.c"
> + .file "double_check_volatile.c"
> .text
> .p2align 4,,15
> .globl main
> @@ -13,8 +13,9 @@
> # first if
>
> #NO_APP
> - decl %eax
> + movl test(%rip), %eax
> movl $1, %edx
> + decl %eax
> je .L4
> #APP
> # lock
> @@ -43,7 +44,8 @@
> # second if
>
> #NO_APP
> - cmpl $1, test(%rip)
> + movl test(%rip), %eax
> + decl %eax
> jne .L8
> #APP
> # if unlock

> _______________________________________________
> devel mailing list
> devel_at_[hidden]
> http://www.open-mpi.org/mailman/listinfo.cgi/devel

--
			Gleb.