
On 29.03.2009, at 19:36, Peter Dimov wrote:
Oliver Abert:
Hi Everyone,
I am using Boost Threads (1.38) as threading library and I also use the thread_specific_ptr to store a minor amount of data per thread (I think currently it is like 5 different pointer values per thread). Technically everything works out fine, but I am having a performance problem on Mac OS X. On Linux the performance is 10 times faster than on Mac OS. If I use pthreads on Mac OS I have identical performance to the Linux version. Both versions are running on the same machine using 8 threads both.
What does your profiler say?
about 80% of the time is spend in __spin_lock which in turnwas called by pthread_once. If I use only one thread (instead of 8) the percantage goes down to 2.5% - which is still a bit much for my taste.
Is there any known problem with shared pointers on Mac OS?
shared_ptr should use the same code on both platforms, either sp_counted_base_gcc_x86.hpp or sp_counted_base_gcc_ppc.hpp, depending on whether your CPU is Intel or PowerPC; see boost/detail/ sp_counted_base.hpp. There is no Mac OS-specific path.
In both cases it is an Intel CPU. Unfortunatly I do not have a clue what is going wrong on Mac OS. I am even using the exact same code on Linux - there shouldn't be any difference.