public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug libstdc++/46294] New: Spinlock with atomic primitives fails
@ 2010-11-03 18:10 dan at blinkmind dot com
  2010-11-03 18:11 ` [Bug libstdc++/46294] " dan at blinkmind dot com
                   ` (6 more replies)
  0 siblings, 7 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:10 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

           Summary: Spinlock with atomic primitives fails
           Product: gcc
           Version: 4.5.1
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
        AssignedTo: unassigned@gcc.gnu.org
        ReportedBy: dan@blinkmind.com


Created attachment 22259
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22259
Spinlock Test g++ application code

Trying to use std::atomic as a spinlock with
compare_exchange_weak/compare_exchange_strong fails.

It results in multiple assertion failures and multiple reads of memory that are
inaccurate leading to race conditions and problems in executing code.

To verify that this should work properly, I also tested with tbb's atomic (also
provided) which works just fine.









dan@brighty:~/workspace/blinkmind/applications/fast-queues/test$ g++-4.5 -v -o
spinlocktest -fopenmp -std=c++0x spinlocktest.cpp -save-temps
Using built-in specs.
COLLECT_GCC=g++-4.5
COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.5.1/lto-wrapper
Target: x86_64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu/Linaro
4.5.1-9ubuntu1' --with-bugurl=file:///usr/share/doc/gcc-4.5/README.Bugs
--enable-languages=c,c++,fortran,objc,obj-c++ --prefix=/usr
--program-suffix=-4.5 --enable-shared --enable-multiarch
--enable-linker-build-id --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix
--with-gxx-include-dir=/usr/include/c++/4.5 --libdir=/usr/lib --enable-nls
--with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug
--enable-libstdcxx-time=yes --enable-plugin --enable-gold
--with-plugin-ld=ld.gold --enable-objc-gc --disable-werror --with-arch-32=i686
--with-tune=generic --enable-checking=release --build=x86_64-linux-gnu
--host=x86_64-linux-gnu --target=x86_64-linux-gnu
Thread model: posix
gcc version 4.5.1 (Ubuntu/Linaro 4.5.1-9ubuntu1) 
COLLECT_GCC_OPTIONS='-v' '-o' 'spinlocktest' '-fopenmp' '-std=c++0x'
'-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread'
 /usr/lib/gcc/x86_64-linux-gnu/4.5.1/cc1plus -E -quiet -v -D_GNU_SOURCE
-D_REENTRANT spinlocktest.cpp -D_FORTIFY_SOURCE=2 -mtune=generic -march=x86-64
-std=c++0x -fopenmp -fpch-preprocess -fstack-protector -o spinlocktest.ii
ignoring nonexistent directory "/usr/local/include/x86_64-linux-gnu"
ignoring nonexistent directory
"/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../x86_64-linux-gnu/include"
ignoring nonexistent directory "/usr/include/x86_64-linux-gnu"
#include "..." search starts here:
#include <...> search starts here:
 /usr/include/c++/4.5
 /usr/include/c++/4.5/x86_64-linux-gnu
 /usr/include/c++/4.5/backward
 /usr/local/include
 /usr/lib/gcc/x86_64-linux-gnu/4.5.1/include
 /usr/lib/gcc/x86_64-linux-gnu/4.5.1/include-fixed
 /usr/include
End of search list.
COLLECT_GCC_OPTIONS='-v' '-o' 'spinlocktest' '-fopenmp' '-std=c++0x'
'-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread'
 /usr/lib/gcc/x86_64-linux-gnu/4.5.1/cc1plus -fpreprocessed spinlocktest.ii
-quiet -dumpbase spinlocktest.cpp -mtune=generic -march=x86-64 -auxbase
spinlocktest -std=c++0x -version -fopenmp -fstack-protector -o spinlocktest.s
GNU C++ (Ubuntu/Linaro 4.5.1-9ubuntu1) version 4.5.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.5.1, GMP version 4.3.2, MPFR version 3.0.0-p3,
MPC version 0.8.2
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
GNU C++ (Ubuntu/Linaro 4.5.1-9ubuntu1) version 4.5.1 (x86_64-linux-gnu)
    compiled by GNU C version 4.5.1, GMP version 4.3.2, MPFR version 3.0.0-p3,
MPC version 0.8.2
GGC heuristics: --param ggc-min-expand=100 --param ggc-min-heapsize=131072
Compiler executable checksum: ee038d8a671383b128b393ee39ab4227
COLLECT_GCC_OPTIONS='-v' '-o' 'spinlocktest' '-fopenmp' '-std=c++0x'
'-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread'
 as -V -Qy --64 -o spinlocktest.o spinlocktest.s
GNU assembler version 2.20.51 (x86_64-linux-gnu) using BFD version (GNU
Binutils for Ubuntu) 2.20.51-system.20100908
COMPILER_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.5.1/:/usr/lib/gcc/x86_64-linux-gnu/4.5.1/:/usr/lib/gcc/x86_64-linux-gnu/:/usr/lib/gcc/x86_64-linux-gnu/4.5.1/:/usr/lib/gcc/x86_64-linux-gnu/
LIBRARY_PATH=/usr/lib/gcc/x86_64-linux-gnu/4.5.1/:/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../lib64/:/lib/../lib64/:/usr/lib/../lib64/:/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../:/lib/:/usr/lib/:/usr/lib/x86_64-linux-gnu/
Reading specs from /usr/lib/gcc/x86_64-linux-gnu/4.5.1/libgomp.spec
COLLECT_GCC_OPTIONS='-v' '-o' 'spinlocktest' '-fopenmp' '-std=c++0x'
'-save-temps' '-shared-libgcc' '-mtune=generic' '-march=x86-64' '-pthread'
 /usr/lib/gcc/x86_64-linux-gnu/4.5.1/collect2 --build-id --no-add-needed
--eh-frame-hdr -m elf_x86_64 --hash-style=gnu -dynamic-linker
/lib64/ld-linux-x86-64.so.2 -z relro -o spinlocktest
/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../lib64/crt1.o
/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../lib64/crti.o
/usr/lib/gcc/x86_64-linux-gnu/4.5.1/crtbegin.o
-L/usr/lib/gcc/x86_64-linux-gnu/4.5.1
-L/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../lib64 -L/lib/../lib64
-L/usr/lib/../lib64 -L/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../..
-L/usr/lib/x86_64-linux-gnu spinlocktest.o -lstdc++ -lm -lgomp -lgcc_s -lgcc
-lpthread -lc -lgcc_s -lgcc /usr/lib/gcc/x86_64-linux-gnu/4.5.1/crtend.o
/usr/lib/gcc/x86_64-linux-gnu/4.5.1/../../../../lib64/crtn.o


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
@ 2010-11-03 18:11 ` dan at blinkmind dot com
  2010-11-03 18:11 ` dan at blinkmind dot com
                   ` (5 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:11 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #2 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:11:37 UTC ---
Created attachment 22261
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22261
G++ Assembler Output atomic test


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
  2010-11-03 18:11 ` [Bug libstdc++/46294] " dan at blinkmind dot com
@ 2010-11-03 18:11 ` dan at blinkmind dot com
  2010-11-03 18:12 ` dan at blinkmind dot com
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:11 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #1 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:11:11 UTC ---
Created attachment 22260
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22260
Spinlock Test g++ ii output


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
  2010-11-03 18:11 ` [Bug libstdc++/46294] " dan at blinkmind dot com
  2010-11-03 18:11 ` dan at blinkmind dot com
@ 2010-11-03 18:12 ` dan at blinkmind dot com
  2010-11-03 18:13 ` dan at blinkmind dot com
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:12 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #3 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:12:01 UTC ---
Created attachment 22262
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22262
Spinlock Test G++ object file


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
                   ` (2 preceding siblings ...)
  2010-11-03 18:12 ` dan at blinkmind dot com
@ 2010-11-03 18:13 ` dan at blinkmind dot com
  2010-11-03 18:16 ` dan at blinkmind dot com
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:13 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #4 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:12:58 UTC ---
Created attachment 22263
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22263
TBB based spinlock (working)

Compiler with -ltbb keep -fopenmp, but -std=c++0x is unnecessary


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
                   ` (3 preceding siblings ...)
  2010-11-03 18:13 ` dan at blinkmind dot com
@ 2010-11-03 18:16 ` dan at blinkmind dot com
  2010-11-03 18:19 ` dan at blinkmind dot com
  2010-11-03 18:24 ` dan at blinkmind dot com
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:16 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #5 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:16:28 UTC ---
Probably requires testing using a machine that has multiple cores :)

My Machine is an INtel i7 720qm, so it has 4 cores + 4 hyperthreads fyi.


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
                   ` (4 preceding siblings ...)
  2010-11-03 18:16 ` dan at blinkmind dot com
@ 2010-11-03 18:19 ` dan at blinkmind dot com
  2010-11-03 18:24 ` dan at blinkmind dot com
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:19 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

--- Comment #6 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:19:04 UTC ---
Created attachment 22264
  --> http://gcc.gnu.org/bugzilla/attachment.cgi?id=22264
TBB Spinlock assembler (includes compare and swap and fetch and store ops
inline)


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [Bug libstdc++/46294] Spinlock with atomic primitives fails
  2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
                   ` (5 preceding siblings ...)
  2010-11-03 18:19 ` dan at blinkmind dot com
@ 2010-11-03 18:24 ` dan at blinkmind dot com
  6 siblings, 0 replies; 8+ messages in thread
From: dan at blinkmind dot com @ 2010-11-03 18:24 UTC (permalink / raw)
  To: gcc-bugs

http://gcc.gnu.org/bugzilla/show_bug.cgi?id=46294

Dan Weber <dan at blinkmind dot com> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|UNCONFIRMED                 |RESOLVED
         Resolution|                            |INVALID

--- Comment #7 from Dan Weber <dan at blinkmind dot com> 2010-11-03 18:24:51 UTC ---
didn't realize that compare_exchange was updating the reference value... after
making adjustments for that this was fixed.


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-11-03 18:24 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2010-11-03 18:10 [Bug libstdc++/46294] New: Spinlock with atomic primitives fails dan at blinkmind dot com
2010-11-03 18:11 ` [Bug libstdc++/46294] " dan at blinkmind dot com
2010-11-03 18:11 ` dan at blinkmind dot com
2010-11-03 18:12 ` dan at blinkmind dot com
2010-11-03 18:13 ` dan at blinkmind dot com
2010-11-03 18:16 ` dan at blinkmind dot com
2010-11-03 18:19 ` dan at blinkmind dot com
2010-11-03 18:24 ` dan at blinkmind dot com

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).