Comments (6)
The following minimal example also produces a data race detected by ThreadSanitizer:
std::vector<std::uint64_t> v(1'000'000);
std::mt19937 gen {std::random_device{}()};
std::ranges::generate(v, gen);
std::sort(std::execution::par, v.begin(), v.end());
Error produced:
2: Write of size 8 at 0x7f76295f7848 by thread T2:
2: #0 __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >::execute(tbb::detail::d1::execution_data&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:618 (main.out+0x443c9f) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #1 tbb::detail::d1::task* tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::outermost_worker_waiter>(tbb::detail::d1::task*, tbb::detail::r1::outermost_worker_waiter&) /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/task_dispatcher.h:323 (libtbb_debug.so.12+0x1a365) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2:
2: Previous write of size 8 at 0x7f76295f7848 by main thread:
2: #0 __pstl::__tbb_backend::__task::__task() /usr/include/c++/13/pstl/parallel_backend_tbb.h:515 (main.out+0x443848) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #1 __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >(__pstl::execution::v1::parallel_policy const&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:663 (main.out+0x443848)
2: #2 __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >* tbb::detail::d1::small_object_allocator::new_object<__pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >, __pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >(tbb::detail::d1::execution_data&, __pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}>&&) /opt/intel/oneapi/tbb/2021.11/include/oneapi/tbb/detail/_small_object_pool.h:55 (main.out+0x443848)
2: #3 __pstl::__tbb_backend::__task* __pstl::__tbb_backend::__task::allocate_func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >(__pstl::execution::v1::parallel_policy const&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:531 (main.out+0x443848)
2: #4 __pstl::__tbb_backend::__task* __pstl::__tbb_backend::__task::make_child_of<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >(__pstl::__tbb_backend::__task*, __pstl::execution::v1::parallel_policy const&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:563 (main.out+0x443848)
2: #5 __pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}>::operator()(__pstl::__tbb_backend::__task*) /usr/include/c++/13/pstl/parallel_backend_tbb.h:1145 (main.out+0x443848)
2: #6 __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >::execute(tbb::detail::d1::execution_data&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:620 (main.out+0x443cbb) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #7 tbb::detail::d1::task* tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::external_waiter>(tbb::detail::d1::task*, tbb::detail::r1::external_waiter&) /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/task_dispatcher.h:323 (libtbb_debug.so.12+0x53c35) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2: #8 tbb::detail::d1::task_arena_function<__pstl::__tbb_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}>(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}, unsigned long)::{lambda()#1}, void>::operator()() const /opt/intel/oneapi/tbb/2021.11/include/oneapi/tbb/task_arena.h:68 (main.out+0x437cb6) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #9 tbb::detail::r1::isolate_within_arena(tbb::detail::d1::delegate_base&, long)::{lambda()#1}::operator()() const /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/arena.cpp:865 (libtbb_debug.so.12+0x113e6) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2: #10 void __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>) /usr/include/c++/13/pstl/algorithm_impl.h:2118 (main.out+0x40e62a) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #11 std::enable_if<__pstl::execution::v1::is_execution_policy<std::remove_cv<std::remove_reference<__pstl::execution::v1::parallel_policy const&>::type>::type>::value, void>::type std::sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>) /usr/include/c++/13/pstl/glue_algorithm_impl.h:633 (main.out+0x40e62a)
2: #12 std::enable_if<__pstl::execution::v1::is_execution_policy<std::remove_cv<std::remove_reference<__pstl::execution::v1::parallel_policy const&>::type>::type>::value, void>::type std::sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > > >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >) /usr/include/c++/13/pstl/glue_algorithm_impl.h:645 (main.out+0x40e62a)
2: #13 main /<edited>/src/main.cpp:131 (main.out+0x40e62a)
2:
2: Thread T2 (tid=40991, running) created by main thread at:
2: #0 pthread_create <null> (libtsan.so.2+0x3e006) (BuildId: 732e44e7f1cd4f0f9ca7d27895a253bebdea6827)
2: #1 tbb::detail::r1::rml::internal::thread_monitor::launch(void* (*)(void*), void*, unsigned long) /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/rml_thread_monitor.h:208 (libtbb_debug.so.12+0x4a120) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2: #2 __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >::execute(tbb::detail::d1::execution_data&) /usr/include/c++/13/pstl/parallel_backend_tbb.h:620 (main.out+0x443cbb) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #3 tbb::detail::d1::task* tbb::detail::r1::task_dispatcher::local_wait_for_all<false, tbb::detail::r1::external_waiter>(tbb::detail::d1::task*, tbb::detail::r1::external_waiter&) /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/task_dispatcher.h:323 (libtbb_debug.so.12+0x53c35) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2: #4 tbb::detail::d1::task_arena_function<__pstl::__tbb_backend::__parallel_stable_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}>(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}, unsigned long)::{lambda()#1}, void>::operator()() const /opt/intel/oneapi/tbb/2021.11/include/oneapi/tbb/task_arena.h:68 (main.out+0x437cb6) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #5 tbb::detail::r1::isolate_within_arena(tbb::detail::d1::delegate_base&, long)::{lambda()#1}::operator()() const /localdisk/ci/runner010/intel-innersource/001/_work/libraries.threading.infrastructure.onetbb-ci/libraries.threading.infrastructure.onetbb-ci/onetbb_source_code/src/tbb/arena.cpp:865 (libtbb_debug.so.12+0x113e6) (BuildId: 209272c75536bf0182a8275d42c8148347e6b5e5)
2: #6 void __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>) /usr/include/c++/13/pstl/algorithm_impl.h:2118 (main.out+0x40e62a) (BuildId: 5e0a4b105b08ad76466044248f6318145de6ec50)
2: #7 std::enable_if<__pstl::execution::v1::is_execution_policy<std::remove_cv<std::remove_reference<__pstl::execution::v1::parallel_policy const&>::type>::type>::value, void>::type std::sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>) /usr/include/c++/13/pstl/glue_algorithm_impl.h:633 (main.out+0x40e62a)
2: #8 std::enable_if<__pstl::execution::v1::is_execution_policy<std::remove_cv<std::remove_reference<__pstl::execution::v1::parallel_policy const&>::type>::type>::value, void>::type std::sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > > >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >) /usr/include/c++/13/pstl/glue_algorithm_impl.h:645 (main.out+0x40e62a)
2: #9 main /<edited>/src/main.cpp:131 (main.out+0x40e62a)
2:
2: SUMMARY: ThreadSanitizer: data race /usr/include/c++/13/pstl/parallel_backend_tbb.h:618 in __pstl::__tbb_backend::__func_task<__pstl::__tbb_backend::__stable_sort_func<__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, unsigned long*, std::less<unsigned long>, __pstl::__internal::__pattern_sort<__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false> >(__pstl::execution::v1::parallel_policy const&, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>, std::integral_constant<bool, false>, std::integral_constant<bool, true>, std::integral_constant<bool, true>)::{lambda()#1}::operator()() const::{lambda(__gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, __gnu_cxx::__normal_iterator<unsigned long*, std::vector<unsigned long, std::allocator<unsigned long> > >, std::less<unsigned long>)#1}> >::execute(tbb::detail::d1::execution_data&)
2: ==================
I am using gcc
:
❯ gcc -v
Using built-in specs.
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-redhat-linux/13/lto-wrapper
OFFLOAD_TARGET_NAMES=nvptx-none
OFFLOAD_TARGET_DEFAULT=1
Target: x86_64-redhat-linux
Configured with: ../configure --enable-bootstrap --enable-languages=c,c++,fortran,objc,obj-c++,ada,go,d,m2,lto --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --with-bugurl=http://bugzilla.redhat.com/bugzilla --enable-shared --enable-threads=posix --enable-checking=release --enable-multilib --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-gnu-unique-object --enable-linker-build-id --with-gcc-major-version-only --enable-libstdcxx-backtrace --with-libstdcxx-zoneinfo=/usr/share/zoneinfo --with-linker-hash-style=gnu --enable-plugin --enable-initfini-array --with-isl=/builddir/build/BUILD/gcc-13.2.1-20231205/obj-x86_64-redhat-linux/isl-install --enable-offload-targets=nvptx-none --without-cuda-driver --enable-offload-defaulted --enable-gnu-indirect-function --enable-cet --with-tune=generic --with-arch_32=i686 --build=x86_64-redhat-linux --with-build-config=bootstrap-lto --enable-link-serialization=1
Thread model: posix
Supported LTO compression algorithms: zlib zstd
gcc version 13.2.1 20231205 (Red Hat 13.2.1-6) (GCC)
from onetbb.
GCC and clang TSAN does not support atomic_thread_fence:
- https://stackoverflow.com/questions/70542993/why-does-the-thread-sanitizer-complain-about-acquire-release-thread-fences
- https://gcc.gnu.org/bugzilla/show_bug.cgi?id=97868
- google/sanitizers#1352
from onetbb.
Hi @emmenlau, @Alejandro-FA, could you please try to rebuild TBB with ThreadSanitizer support .
from onetbb.
Hi @pavelkumbrasev, I have tried it but I get an error in the build process.
I have configured the project as follows:
cd /tmp
git clone https://github.com/oneapi-src/oneTBB.git
cd oneTBB
mkdir cmake-build && cd cmake-build
cmake -DCMAKE_INSTALL_PREFIX=/tmp/intel/oneTBB_tsan -DTBB_SANITIZE=thread ..
Here is the output of the configuration process:
-- The CXX compiler identification is GNU 13.2.1
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- CMAKE_BUILD_TYPE is not specified. Using default: RelWithDebInfo
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD
-- Performing Test CMAKE_HAVE_LIBC_PTHREAD - Success
-- Found Threads: TRUE
-- Checking for one of the modules 'hwloc'
-- Looking for getcontext
-- Looking for getcontext - found
-- Performing Test _fsanitize_thread
-- Performing Test _fsanitize_thread - Success
-- The C compiler identification is GNU 13.2.1
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working C compiler: /usr/bin/cc - skipped
-- Detecting C compile features
-- Detecting C compile features - done
-- The tbbbind_2_5 target will be configured using the HWLOC 2.10.0
-- Performing Test LINKER_HAS_NO_AS_NEEDED
-- Performing Test LINKER_HAS_NO_AS_NEEDED - Success
-- Configuring done (0.7s)
-- Generating done (0.1s)
-- Build files have been written to: /tmp/oneTBB/cmake-build
And when doing make -j
I get the following error:
[ 15%] Building CXX object test/CMakeFiles/test_malloc_lib_unload.dir/tbbmalloc/test_malloc_lib_unload.cpp.o
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/concurrent_bounded_queue.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = long unsigned int]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::sleep_node<long unsigned int>; Pred = tbb::detail::r1::wait_bounded_queue_monitor(concurrent_monitor*, std::size_t, std::ptrdiff_t, tbb::detail::d1::delegate_base&)::<lambda()>; Context = long unsigned int]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘void tbb::detail::r1::wait_bounded_queue_monitor(concurrent_monitor*, std::size_t, std::ptrdiff_t, tbb::detail::d1::delegate_base&)’ at /tmp/oneTBB/src/tbb/concurrent_bounded_queue.cpp:57:53:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:132: src/tbb/CMakeFiles/tbb.dir/concurrent_bounded_queue.cpp.o] Error 1
make[2]: *** Waiting for unfinished jobs....
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/tbb_allocator.h:20,
from /tmp/oneTBB/src/tbb/task_group_context.cpp:18:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::resume_node&; Pred = tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)::<lambda()>; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘virtual tbb::detail::d1::task* tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)’ at /tmp/oneTBB/src/tbb/task_dispatcher.h:77:27:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:440: src/tbb/CMakeFiles/tbb.dir/task_group_context.cpp.o] Error 1
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/arena_slot.h:21,
from /tmp/oneTBB/src/tbb/arena_slot.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::arena::advertise_new_work() [with new_work_type work_type = tbb::detail::r1::arena::wakeup]’ at /tmp/oneTBB/src/tbb/arena.h:408:29:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
[ 15%] Linking CXX shared library ../../gnu_13.2_cxx11_64_relwithdebinfo/libtbbbind_2_5.so
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:118: src/tbb/CMakeFiles/tbb.dir/arena_slot.cpp.o] Error 1
[ 15%] Built target tbbbind_2_5
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/misc.h:22,
from /tmp/oneTBB/src/tbb/governor.h:22,
from /tmp/oneTBB/src/tbb/governor.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::resume_node&; Pred = tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)::<lambda()>; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘virtual tbb::detail::d1::task* tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)’ at /tmp/oneTBB/src/tbb/task_dispatcher.h:77:27:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:174: src/tbb/CMakeFiles/tbb.dir/governor.cpp.o] Error 1
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/address_waiter.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = tbb::detail::r1::address_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::sleep_node<tbb::detail::r1::address_context>; Pred = tbb::detail::d1::delegate_base&; Context = tbb::detail::r1::address_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘void tbb::detail::r1::wait_on_address(void*, tbb::detail::d1::delegate_base&, uintptr_t)’ at /tmp/oneTBB/src/tbb/address_waiter.cpp:71:48:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:76: src/tbb/CMakeFiles/tbb.dir/address_waiter.cpp.o] Error 1
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/cache_aligned_allocator.h:20,
from /tmp/oneTBB/src/tbb/small_object_pool.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::resume_node&; Pred = tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)::<lambda()>; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘virtual tbb::detail::d1::task* tbb::detail::r1::suspend_point_type::resume_task::execute(tbb::detail::d1::execution_data&)’ at /tmp/oneTBB/src/tbb/task_dispatcher.h:77:27:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:398: src/tbb/CMakeFiles/tbb.dir/small_object_pool.cpp.o] Error 1
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/task_dispatcher.h:20,
from /tmp/oneTBB/src/tbb/arena.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::notify(const P&) [with P = tbb::detail::r1::arena::request_workers(int, int, bool)::<lambda(tbb::detail::r1::market_context)>; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:350:29,
inlined from ‘void tbb::detail::r1::arena::request_workers(int, int, bool)’ at /tmp/oneTBB/src/tbb/arena.cpp:352:45:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:104: src/tbb/CMakeFiles/tbb.dir/arena.cpp.o] Error 1
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/scheduler_common.h:20,
from /tmp/oneTBB/src/tbb/task.cpp:18:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::notify(const P&) [with P = tbb::detail::r1::notify_waiters(uintptr_t)::<lambda(tbb::detail::r1::market_context)>; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:350:29,
inlined from ‘void tbb::detail::r1::notify_waiters(uintptr_t)’ at /tmp/oneTBB/src/tbb/task.cpp:221:80:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:412: src/tbb/CMakeFiles/tbb.dir/task.cpp.o] Error 1
[ 15%] Linking C shared library ../../gnu_13.2_cxx11_64_relwithdebinfo/libtbbmalloc.so
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/mutex.h:21,
from /tmp/oneTBB/src/tbb/threading_control.h:20,
from /tmp/oneTBB/src/tbb/threading_control.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::abort_all() [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:422:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::destroy() [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:456:24,
inlined from ‘tbb::detail::r1::thread_control_monitor::~thread_control_monitor()’ at /tmp/oneTBB/src/tbb/thread_control_monitor.h:102:16,
inlined from ‘void tbb::detail::r1::cache_aligned_deleter::operator()(T*) const [with T = tbb::detail::r1::thread_control_monitor]’ at /tmp/oneTBB/src/tbb/scheduler_common.h:75:16,
inlined from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = tbb::detail::r1::thread_control_monitor; _Dp = tbb::detail::r1::cache_aligned_deleter]’ at /usr/include/c++/13/bits/unique_ptr.h:404:17,
inlined from ‘tbb::detail::r1::threading_control_impl::~threading_control_impl()’ at /tmp/oneTBB/src/tbb/threading_control.h:42:7,
inlined from ‘void tbb::detail::r1::cache_aligned_deleter::operator()(T*) const [with T = tbb::detail::r1::threading_control_impl]’ at /tmp/oneTBB/src/tbb/scheduler_common.h:75:16,
inlined from ‘std::unique_ptr<_Tp, _Dp>::~unique_ptr() [with _Tp = tbb::detail::r1::threading_control_impl; _Dp = tbb::detail::r1::cache_aligned_deleter]’ at /usr/include/c++/13/bits/unique_ptr.h:404:17:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
[ 15%] Built target tbbmalloc
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:482: src/tbb/CMakeFiles/tbb.dir/threading_control.cpp.o] Error 1
[ 15%] Building CXX object test/CMakeFiles/_test_malloc_used_by_lib.dir/tbbmalloc/test_malloc_used_by_lib.cpp.o
[ 15%] Building CXX object test/CMakeFiles/test_malloc_init_shutdown.dir/tbbmalloc/test_malloc_init_shutdown.cpp.o
[ 15%] Building C object test/CMakeFiles/test_malloc_pure_c.dir/tbbmalloc/test_malloc_pure_c.c.o
[ 16%] Building CXX object src/tbbmalloc_proxy/CMakeFiles/tbbmalloc_proxy.dir/function_replacement.cpp.o
[ 16%] Building CXX object test/CMakeFiles/test_malloc_compliance.dir/tbbmalloc/test_malloc_compliance.cpp.o
[ 16%] Building CXX object src/tbbmalloc_proxy/CMakeFiles/tbbmalloc_proxy.dir/proxy.cpp.o
[ 16%] Building CXX object test/CMakeFiles/test_malloc_pools.dir/tbbmalloc/test_malloc_pools.cpp.o
[ 16%] Building CXX object test/CMakeFiles/test_scalable_allocator.dir/tbbmalloc/test_scalable_allocator.cpp.o
[ 17%] Building CXX object test/CMakeFiles/test_malloc_regression.dir/tbbmalloc/test_malloc_regression.cpp.o
In file included from /usr/include/c++/13/atomic:41,
from /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_utils.h:22,
from /tmp/oneTBB/src/tbb/task_dispatcher.h:20,
from /tmp/oneTBB/src/tbb/task_dispatcher.cpp:17:
In function ‘void std::atomic_thread_fence(memory_order)’,
inlined from ‘void tbb::detail::d0::atomic_fence_seq_cst()’ at /tmp/oneTBB/src/tbb/../../include/oneapi/tbb/detail/_machine.h:87:29,
inlined from ‘void tbb::detail::r1::concurrent_monitor_base<Context>::prepare_wait(tbb::detail::r1::wait_node<Context>&) [with Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:223:29,
inlined from ‘bool tbb::detail::r1::concurrent_monitor_base<Context>::wait(Pred&&, NodeType&&) [with NodeType = tbb::detail::r1::sleep_node<tbb::detail::r1::market_context>; Pred = tbb::detail::r1::coroutine_waiter::pause(tbb::detail::r1::arena_slot&)::<lambda()>&; Context = tbb::detail::r1::market_context]’ at /tmp/oneTBB/src/tbb/concurrent_monitor.h:260:21,
inlined from ‘void tbb::detail::r1::sleep_waiter::sleep(uintptr_t, Pred) [with Pred = tbb::detail::r1::coroutine_waiter::pause(tbb::detail::r1::arena_slot&)::<lambda()>]’ at /tmp/oneTBB/src/tbb/waiters.h:115:92,
inlined from ‘void tbb::detail::r1::coroutine_waiter::pause(tbb::detail::r1::arena_slot&)’ at /tmp/oneTBB/src/tbb/waiters.h:178:14:
/usr/include/c++/13/bits/atomic_base.h:144:26: error: ‘atomic_thread_fence’ is not supported with ‘-fsanitize=thread’ [-Werror=tsan]
144 | { __atomic_thread_fence(int(__m)); }
| ~~~~~~~~~~~~~~~~~~~~~^~~~~~~~~~
compilation terminated due to -Wfatal-errors.
cc1plus: all warnings being treated as errors
make[2]: *** [src/tbb/CMakeFiles/tbb.dir/build.make:426: src/tbb/CMakeFiles/tbb.dir/task_dispatcher.cpp.o] Error 1
make[1]: *** [CMakeFiles/Makefile2:457: src/tbb/CMakeFiles/tbb.dir/all] Error 2
make[1]: *** Waiting for unfinished jobs....
[ 17%] Linking C executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_pure_c
[ 17%] Built target test_malloc_pure_c
[ 18%] Linking CXX shared library ../gnu_13.2_cxx11_64_relwithdebinfo/lib_test_malloc_used_by_lib.so
[ 18%] Built target _test_malloc_used_by_lib
[ 18%] Linking CXX shared library ../../gnu_13.2_cxx11_64_relwithdebinfo/libtbbmalloc_proxy.so
[ 18%] Built target tbbmalloc_proxy
[ 18%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_handle_perror
[ 18%] Built target test_handle_perror
[ 18%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_lib_unload
[ 18%] Built target test_malloc_lib_unload
[ 18%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_init_shutdown
[ 18%] Built target test_malloc_init_shutdown
[ 18%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_regression
[ 18%] Built target test_malloc_regression
[ 19%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_compliance
[ 19%] Built target test_malloc_compliance
[ 20%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_pools
[ 20%] Built target test_malloc_pools
[ 20%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_malloc_whitebox
[ 21%] Linking CXX executable ../gnu_13.2_cxx11_64_relwithdebinfo/test_scalable_allocator
[ 21%] Built target test_malloc_whitebox
[ 21%] Built target test_scalable_allocator
make: *** [Makefile:166: all] Error 2
from onetbb.
From your comment, do I understand correctly that if I want to use Thread Sanitizer with my application, I need to build oneTBB with Thread Sanitizer support? At the moment I simply installed oneTBB following these instructions: https://www.intel.com/content/www/us/en/docs/onetbb/get-started-guide/2021-6/install-onetbb-on-linux-os.html
from onetbb.
@Alejandro-FA, it might lead to unexpected false positive reports that will lead into TBB. So to properly test application that use TBB it also should be built with TSan support.
The error you got probably related to GNU 13.2.1 (we didn't test TSan with this version yet) (problem). Could you please try to build it with different version (GNU < 11 should be fine).
from onetbb.
Related Issues (20)
- Setting `__TBB_DEFAULT_PARTITIONER` doesn't set partitioner in `parallel_for` with step HOT 3
- Undefined reference linking error HOT 6
- Is oneTBB signal-safe? HOT 1
- getting compile error on tag 2021.9.0 with gcc 8.5.0 HOT 3
- Deadlock issue in OpenBLAS with TBB HOT 2
- 2021.12.0: missing tag/release? HOT 3
- Global task_schedule_observer leads to error on WASM and static lib x86 HOT 9
- doc/README.md is misleading HOT 2
- Immediately scheduling task on a different thread HOT 9
- std::aligned_storage is deprecated in C++23 HOT 1
- Security.md: replace incorrect email address
- Support priority for join_node HOT 1
- CMake FetchContent fails to install oneTBB HOT 1
- Avoid split constructor for the Range concept HOT 2
- Compiling TBB with recent GCC 13.2, 11.4 fails HOT 2
- Possible lifetime issue with parallel_scan over non trivially destructible range HOT 3
- WASM - linking to both `-ltbb` and `-ltbbmalloc` gives duplicate symbol error for `itt_notify` HOT 3
- Potential Array Out of Bounds and Redundant Code in create_record Function HOT 1
- static_partitioner + global_control triggers an unbounded memory leak HOT 2
- Can't compile concurrent_vector with include winsock2.h or ws2tcpip.h HOT 5
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from onetbb.