Closed
Description
It seems that UR was causing memory corruption. See the valgrind output in the reproducer.
The exectuable can run by itself and thus the issue was hidden.
I'm using ubuntu 24.04.2 with oneapi 2025.0. Problem occurs at initialization.
git clone --depth=1 https://github.com/QMCPACK/qmcpack.git
cd qmcpack/build;
cmake -DCMAKE_C_COMPILER=icx -DCMAKE_CXX_COMPILER=icpx -DQMC_GPU_ARCHS=intel_gpu_bmg_g21 -DQMC_MPI=OFF ..
cd src/QMCWaveFunctions/tests
make -j32 test_wavefunction_common
valgrind ./test_wavefunction_common
==12684== Memcheck, a memory error detector
==12684== Copyright (C) 2002-2022, and GNU GPL'd, by Julian Seward et al.
==12684== Using Valgrind-3.22.0 and LibVEX; rerun with -h for copyright info
==12684== Command: ./test_wavefunction_common
==12684==
==12684== Mismatched free() / delete / delete []
==12684== at 0x484988F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x323D2F82: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247B0AE: ur_validation_layer::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247AFF7: ur_validation_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2C1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684== by 0x30CE55B6: sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30C42D0F: sycl::_V1::detail::platform_impl::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30D2B51C: sycl::_V1::platform::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== Address 0x43a62ed0 is 0 bytes inside a block of size 31 alloc'd
==12684== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x30EF170E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EF282A: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EE5D1E: std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x323D2F52: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247B0AE: ur_validation_layer::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247AFF7: ur_validation_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2C1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684==
==12684== Mismatched free() / delete / delete []
==12684== at 0x484988F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x323D3D40: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247B0AE: ur_validation_layer::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247AFF7: ur_validation_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2C1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684== by 0x30CE55B6: sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30C42D0F: sycl::_V1::detail::platform_impl::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30D2B51C: sycl::_V1::platform::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== Address 0x43a62c80 is 0 bytes inside a block of size 513 alloc'd
==12684== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x30EF1DAB: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EE661E: std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow(int) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EEFEA0: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EDFDC3: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x323D2F33: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247B0AE: ur_validation_layer::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x3247AFF7: ur_validation_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2C1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684==
==12684== Mismatched free() / delete / delete []
==12684== at 0x484988F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x323D2F82: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x324FCFAE: ur_sanitizer_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2D1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684== by 0x30CE55B6: sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30C42D0F: sycl::_V1::detail::platform_impl::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30D2B51C: sycl::_V1::platform::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x6D2B8F: std::enable_if<detail::InteropFeatureSupportMap<(sycl::_V1::backend)2>::MakeDevice==(true), sycl::_V1::device>::type sycl::_V1::make_device<(sycl::_V1::backend)2>(sycl::_V1::backend_traits<(sycl::_V1::backend)2>::input_type<sycl::_V1::device> const&) (in /home/yeluo/opt/qmcpack/build_oneapi_offload_sycl_real_MP_nompi/src/QMCWaveFunctions/tests/test_wavefunction_common)
==12684== Address 0x43a64f30 is 0 bytes inside a block of size 31 alloc'd
==12684== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x30EF170E: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_mutate(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EF282A: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::_M_replace(unsigned long, unsigned long, char const*, unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EE5D1E: std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x323D2F52: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x324FCFAE: ur_sanitizer_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2D1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684== by 0x30CE55B6: sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684==
==12684== Mismatched free() / delete / delete []
==12684== at 0x484988F: free (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x323D3D40: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x324FCFAE: ur_sanitizer_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2D1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684== by 0x30CE55B6: sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30C42D0F: sycl::_V1::detail::platform_impl::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x30D2B51C: sycl::_V1::platform::get_platforms() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x6D2B8F: std::enable_if<detail::InteropFeatureSupportMap<(sycl::_V1::backend)2>::MakeDevice==(true), sycl::_V1::device>::type sycl::_V1::make_device<(sycl::_V1::backend)2>(sycl::_V1::backend_traits<(sycl::_V1::backend)2>::input_type<sycl::_V1::device> const&) (in /home/yeluo/opt/qmcpack/build_oneapi_offload_sycl_real_MP_nompi/src/QMCWaveFunctions/tests/test_wavefunction_common)
==12684== Address 0x43a64ce0 is 0 bytes inside a block of size 513 alloc'd
==12684== at 0x4846FA3: operator new(unsigned long) (in /usr/libexec/valgrind/vgpreload_memcheck-amd64-linux.so)
==12684== by 0x30EF1DAB: std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >::reserve(unsigned long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EE661E: std::__cxx11::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::overflow(int) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EEFEA0: std::basic_streambuf<char, std::char_traits<char> >::xsputn(char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x30EDFDC3: std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, long) (in /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33)
==12684== by 0x323D2F33: logger::create_logger(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, bool, bool, logger::Level) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x324FCFAE: ur_sanitizer_layer::getContext() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FD2D1: ur_lib::context_t::context_t() (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323FF0D7: ur_lib::urLoaderInit(unsigned int, ur_loader_config_handle_t_*) (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x323EBC8E: urLoaderInit (in /opt/intel/oneapi/compiler/2025.0/lib/libur_loader.so.0.10.15)
==12684== by 0x30CE6402: std::call_once<sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0>(std::once_flag&, sycl::_V1::detail::ur::initializeUr(ur_loader_config_handle_t_*)::$_0&&)::{lambda()#2}::__invoke() (in /opt/intel/oneapi/compiler/2025.0/lib/libsycl.so.8.0.0)
==12684== by 0x318E0ED2: __pthread_once_slow (pthread_once.c:116)
==12684==
hwloc x86 backend cannot work under Valgrind, disabling.
May be reenabled by dumping CPUIDs with hwloc-gather-cpuid
and reloading them under Valgrind with HWLOC_CPUID_PATH.
==12684== Warning: noted but unhandled ioctl 0x30000001 with no direction hints.
==12684== This could cause spurious value errors to appear.
==12684== See README_MISSING_SYSCALL_OR_IOCTL for guidance on writing a proper wrapper.
==12684== Warning: set address range perms: large range [0x200000000, 0x300200000) (noaccess)
QMCPACK WARNING Free memory queries always return 0 due to inactive 'oneAPI' System Resource Management (sysman). Set environment variable ZES_ENABLE_SYSMAN to 1 to activate the query feature.
QMCPACK printout is suppressed. Use --turn-on-printout to see all the printout.
===============================================================================
All tests passed (28 assertions in 7 test cases)
==12684==
==12684== HEAP SUMMARY:
==12684== in use at exit: 4,920,349 bytes in 6,914 blocks
==12684== total heap usage: 396,570 allocs, 389,656 frees, 86,345,345 bytes allocated
==12684==
==12684== LEAK SUMMARY:
==12684== definitely lost: 552 bytes in 2 blocks
==12684== indirectly lost: 0 bytes in 0 blocks
==12684== possibly lost: 1,051,280 bytes in 16 blocks
==12684== still reachable: 3,868,517 bytes in 6,896 blocks
==12684== suppressed: 0 bytes in 0 blocks
==12684== Rerun with --leak-check=full to see details of leaked memory
==12684==
==12684== For lists of detected and suppressed errors, rerun with: -s
==12684== ERROR SUMMARY: 4 errors from 4 contexts (suppressed: 0 from 0)
Metadata
Metadata
Assignees
Labels
No labels