-
Notifications
You must be signed in to change notification settings - Fork 1.1k
Description
Summary
When std::sort(std::execution::par_unseq,...) is called repeatedly it leaks memory. Ultimately it will exhaust the machine's memory and the kernel will kill the process.
Single threaded sort does not leak.
sample code with precise instructions to reproduce is here:
https://github.com/oschonrock/tbbleak
tested on Ubuntu 24.04: exact details at repo above
discovered using libtbb-dev:amd64 2021.11.0-2ubuntu2 package from ubuntu repos
also confirmed by compiling the head of https://github.com/oneapi-src/oneTBB, ie this commit
42b833f
compiled with gcc-13 and clang-18 (both from ubuntu 24.04)
Observed Behavior
std::sort(par_unseq,.... ) leaks as shown by output from above demo code
Expected Behavior
std::sort(par_unseq,.... ) does not leak
Maybe Related
A very similar issue was reported here in June 2024:
https://community.intel.com/t5/Intel-oneAPI-Threading-Building/std-sort-std-execution-par-unseq-has-a-memory-leak-on-Linux/m-p/1582773
and it was solved here:
but on the oneDPL codebase.
Valgrind
Running:
/build.sh && valgrind ./build/gcc/relwithdebinfo/sort_leak # see tbbleak repo aboveshows some leaks. If the call to std::sort(par_unseq,..) is commented out, the leaks go away
ASAN
When Address sanitizer is run as follows:
./build.sh debug && ./build/gcc/debug/sort_leak # see other repo abovewe get some runtime errors complaining about misaligned addresses
(these are not reported when std::sort(par_unseq,...) is commented out)
/usr/include/c++/13/pstl/parallel_backend_tbb.h:515:7: runtime error: member access within misaligned address 0x76af91a090e0 for type 'struct __task', which requires 64 byte alignment
0x76af91a090e0: note: pointer points here
00 00 00 00 f8 98 bd 34 b3 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
...
/usr/include/c++/13/pstl/parallel_backend_tbb.h:675:7: runtime error: reference binding to misaligned address 0x76af91a090e0 for type 'struct __as_base ', which requires 64 byte alignment
0x76af91a090e0: note: pointer points here
00 00 00 00 28 99 bd 34 b3 59 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00