Intel® oneAPI Threading Building Blocks Developer Guide and API Reference
A newer version of this document is available. Customers should click here to go to the newest version.
Known Limitations
This page outlines the known limitations of oneTBB to help you better understand its capabilities.
Debug TBB In The SYCL Program
Limitation: The application may crash when using the Debug version of oneTBB in a SYCL program compiled with Intel(R) oneAPI DPC++/C++ Compiler. This happens because both tbb (Release version) and tbb_debug (Debug version) libraries load simultaneously, causing conflicts.
Solution: Do one of the following:
Link the application with the Release version tbb instead of tbb_debug.
Use the qtbb flag provided by the Intel(R) oneAPI DPC++/C++ Compiler.
Freestanding Compilation Mode
Limitation: oneTBB does not support the freestanding compilation mode.
Risk: Compiling an application that utilizes oneTBB headers using the Intel(R) oneAPI DPC++/C++ Compiler may result in failure on Windows* OS if the /Qfreestanding compiler option is employed.
Static Assert
Limitation: A static assert causes the compilation failures in oneTBB headers if the following conditions are satisfied:
Compilation is done with Clang 12.0.0 or a more recent version.
The LLVM standard library is employed, coupled with the use of the -ffreestanding flag and C++11/14 compiler options.
Risk: The compilation failures.
Interface Incompatibilities: TBB vs oneTBB
Limitation: An application using Parallel STL algorithms in the libstdc++ versions 9 and 10 may fail to compile due to incompatible interface changes between earlier versions of Threading Building Blocks (TBB) and oneAPI Threading Building Blocks (oneTBB).
Solution: Disable support for Parallel STL algorithms by defining PSTL_USE_PARALLEL_POLICIES (in libstdc++ 9) or _GLIBCXX_USE_TBB_PAR_BACKEND (in libstdc++ 10) macro to zero before inclusion of the first standard header file in each translation unit.
Incorrect Installation Location
Limitation: On Linux* OS, if oneAPI Threading Building Blocks (oneTBB) or Threading Building Blocks (TBB) are installed in a system folder, such as /usr/lib64, the application may fail to link due to the order in which the linker searches for libraries.
Risk: The issue does not affect the program execution.
Solution: Use the -L linker option to specify the correct location of oneTBB library.
fork() Support
Limitation: oneTBB does not support fork().
Solution: To work-around the issue, consider using task_scheduler_handle to join oneTBB worker threads before using fork().
Dynamic Malloc Replacement and Topology API Incompatibilities
Limitation: On Linux* OS, using dynamic malloc replacement with tbb::info and tbb::task_arena::constraints APIs may result in runtime failures.
Solution: Set TBB_ENABLE_SANITIZERS=1 in the environment. This informs that dynamic malloc replacement is used.