Boost logo

Boost :

Subject: [boost] [lockfree] review
From: Gordon Woodhull (gordon_at_[hidden])
Date: 2011-07-26 04:08:35


Hi Tim,

Hopefully I'll have at least a partial review. I only know enough about the subject to be a little dangerous. (One course in concurrent data structures, one successfully implemented lockfree hash table - except for the memory reclamation. Unspecified barriers and ABA problems. :p )

Considering the difficulty of the subject, you seem to have carefully chosen a small set of algorithms where at least there is consensus that the sources you are using have solved the problem correctly.

I apologize if this has already been covered, but I don't see anything in the documentation about which platforms and compilers this has been tested on. These algorithms are extremely susceptible to compiler and processor optimizations.

Anyway, I thought I would try to run the tests, and maybe try changing the testing methodology a little, but I got a few compiler errors, below.

Defining uint fixed most of these, but bench_1.cpp also appears to be out of date? Of course I also have my lack of understanding of boost build library linking to contend with. Hope to try again later.

Cheers,
Gordon

~/lib/boost_lockfree/libs/lockfree/test ~/src/boost-trunk
grodo-mcwoohu:test gordon$ bjam
...found 141 targets...
...updating 21 targets...
darwin.compile.c++ ../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi/bench_1.o
g++: unrecognized option '-no-cpp-precomp'
bench_1.cpp: In function 'void test_fifo_pop()':
bench_1.cpp:67:23: error: no matching function for call to 'boost::lockfree::fifo<long int>::dequeue(long int*)'
../../../boost/lockfree/fifo.hpp:214:10: note: candidate is: bool boost::lockfree::detail::fifo<T, freelist_t, Alloc>::dequeue(T&) [with T = long int, freelist_t = boost::lockfree::caching_freelist_t, Alloc = std::allocator<long int>]
bench_1.cpp: In function 'void test_fifo_pop_unsafe()':
bench_1.cpp:77:30: error: no matching function for call to 'boost::lockfree::fifo<long int>::dequeue_unsafe(long int*)'
../../../boost/lockfree/fifo.hpp:255:10: note: candidate is: bool boost::lockfree::detail::fifo<T, freelist_t, Alloc>::dequeue_unsafe(T&) [with T = long int, freelist_t = boost::lockfree::caching_freelist_t, Alloc = std::allocator<long int>]
bench_1.cpp: In function 'void test_stack_pop()':
bench_1.cpp:87:19: error: no matching function for call to 'boost::lockfree::stack<long int>::pop(long int*)'
../../../boost/lockfree/stack.hpp:179:10: note: candidate is: bool boost::lockfree::stack<T, freelist_t, Alloc>::pop(T&) [with T = long int, freelist_t = boost::lockfree::caching_freelist_t, Alloc = std::allocator<long int>]
bench_1.cpp: In function 'void test_stack_pop_unsafe()':
bench_1.cpp:97:26: error: no matching function for call to 'boost::lockfree::stack<long int>::pop_unsafe(long int*)'
../../../boost/lockfree/stack.hpp:207:10: note: candidate is: bool boost::lockfree::stack<T, freelist_t, Alloc>::pop_unsafe(T&) [with T = long int, freelist_t = boost::lockfree::caching_freelist_t, Alloc = std::allocator<long int>]

    "g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -dynamic -no-cpp-precomp -gdwarf-2 -fexceptions -fPIC -I"../../.." -c -o "../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi/bench_1.o" "bench_1.cpp"

...failed darwin.compile.c++ ../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi/bench_1.o...
...skipped <p../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi>bench_1 for lack of <p../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi>bench_1.o...
...skipped <p../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi>bench_1.run for lack of <p../../../bin.v2/libs/lockfree/test/bench_1.test/darwin-4.5.3/debug/threading-multi>bench_1...
darwin.compile.c++ ../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi/fifo_test.o
g++: unrecognized option '-no-cpp-precomp'
fifo_test.cpp:103:18: error: 'uint' does not name a type
fifo_test.cpp: In member function 'void fifo_tester<freelist_t>::add()':
fifo_test.cpp:116:14: error: 'uint' was not declared in this scope
fifo_test.cpp:116:19: error: expected ';' before 'i'
fifo_test.cpp:116:26: error: 'i' was not declared in this scope
fifo_test.cpp:116:31: error: 'nodes_per_thread' was not declared in this scope
fifo_test.cpp: In member function 'void fifo_tester<freelist_t>::run()':
fifo_test.cpp:187:1: error: 'nodes_per_thread' was not declared in this scope

    "g++" -ftemplate-depth-128 -O0 -fno-inline -Wall -g -dynamic -no-cpp-precomp -gdwarf-2 -fexceptions -fPIC -I"../../.." -c -o "../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi/fifo_test.o" "fifo_test.cpp"

...failed darwin.compile.c++ ../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi/fifo_test.o...
...skipped <p../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi>fifo_test for lack of <p../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi>fifo_test.o...
...skipped <p../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi>fifo_test.run for lack of <p../../../bin.v2/libs/lockfree/test/fifo_test.test/darwin-4.5.3/debug/threading-multi>fifo_test...
darwin.link ../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi/freelist_test
ld: library not found for -lboost_thread
collect2: ld returned 1 exit status

    "g++" -o "../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi/freelist_test" "../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi/freelist_test.o" -lboost_thread -lboost_unit_test_framework -g
       

...failed darwin.link ../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi/freelist_test...
...skipped <p../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi>freelist_test.run for lack of <p../../../bin.v2/libs/lockfree/test/freelist_test.test/darwin-4.5.3/debug/threading-multi>freelist_test...
darwin.compile.c++ ../../../bin.v2/libs/lockfree/test/ringbuffer_test.test/darwin-4.5.3/debug/threading-multi/ringbuffer_test.o
g++: unrecognized option '-no-cpp-precomp'
ringbuffer_test.cpp:209:14: error: 'uint' does not name a type
ringbuffer_test.cpp: In member function 'void ringbuffer_tester::add()':
ringbuffer_test.cpp:225:14: error: 'uint' was not declared in this scope
ringbuffer_test.cpp:225:19: error: expected ';' before 'i'
ringbuffer_test.cpp:225:26: error: 'i' was not declared in this scope
ringbuffer_test.cpp:225:31: error: 'nodes_per_thread' was not declared in this scope
ringbuffer_test.cpp: In member function 'void ringbuffer_tester::run()':
ringbuffer_test.cpp:284:1: error: 'nodes_per_thread' was not declared in this scope
ringbuffer_test.cpp: In member function 'void ringbuffer_tester_buffering::add()':
ringbuffer_test.cpp:315:14: error: 'uint' was not declared in this scope
ringbuffer_test.cpp:315:19: error: expected ';' before 'i'
ringbuffer_test.cpp:315:26: error: 'i' was not declared in this scope
ringbuffer_test.cpp:315:31: error: 'nodes_per_thread' was not declared in this scope
ringbuffer_test.cpp: In member function 'void ringbuffer_tester_buffering::run()':
ringbuffer_test.cpp:386:1: error: 'nodes_per_thread' was not declared in this scope
 


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk