From 31eccef7c52ed3fef82751cd50d74c2688bce72a Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 12:40:00 +0300 Subject: [PATCH 1/7] [SYCL] Optionally enable STL assertions --- buildbot/configure.py | 6 ++++++ sycl/CMakeLists.txt | 12 ++++++++++++ sycl/cmake/modules/AddSYCLExecutable.cmake | 10 +++++++++- sycl/test/lit.cfg.py | 2 ++ sycl/test/lit.site.cfg.py.in | 1 + 5 files changed, 30 insertions(+), 1 deletion(-) diff --git a/buildbot/configure.py b/buildbot/configure.py index 310eed6a63df3..7e746a4a5ba40 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -25,6 +25,7 @@ def do_configure(args): libclc_targets_to_build = '' sycl_build_pi_cuda = 'OFF' sycl_werror = 'ON' + sycl_enable_stl_assertions = 'OFF' llvm_enable_assertions = 'ON' llvm_enable_doxygen = 'OFF' llvm_enable_sphinx = 'OFF' @@ -44,6 +45,9 @@ def do_configure(args): if args.no_assertions: llvm_enable_assertions = 'OFF' + if args.stl_assertions: + sycl_enable_stl_assertions = 'ON' + if args.docs: llvm_enable_doxygen = 'ON' llvm_enable_sphinx = 'ON' @@ -69,6 +73,7 @@ def do_configure(args): "-DSYCL_BUILD_PI_CUDA={}".format(sycl_build_pi_cuda), "-DLLVM_BUILD_TOOLS=ON", "-DSYCL_ENABLE_WERROR={}".format(sycl_werror), + "-DSYCL_ENABLE_STL_ASSERTIONS={}".format(sycl_enable_stl_assertions), "-DCMAKE_INSTALL_PREFIX={}".format(install_dir), "-DSYCL_INCLUDE_TESTS=ON", # Explicitly include all kinds of SYCL tests. "-DLLVM_ENABLE_DOXYGEN={}".format(llvm_enable_doxygen), @@ -129,6 +134,7 @@ def main(): metavar="BUILD_TYPE", default="Release", help="build type: Debug, Release") parser.add_argument("--cuda", action='store_true', help="switch from OpenCL to CUDA") parser.add_argument("--no-assertions", action='store_true', help="build without assertions") + parser.add_argument("--stl-assertions", action='store_true', help="build with STL assertions") parser.add_argument("--docs", action='store_true', help="build Doxygen documentation") parser.add_argument("--system-ocl", action='store_true', help="use OpenCL deps from system (no download)") parser.add_argument("--no-werror", action='store_true', help="Don't treat warnings as errors") diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index 8823bc6ca870f..a8d4fa69ef257 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -6,6 +6,7 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(SYCL_ENABLE_WERROR "Treat all warnings as errors in SYCL project" OFF) +option(SYCL_ENABLE_STL_ASSERTIONS "Enable assertions in STL containers" OFF) option(SYCL_ADD_DEV_VERSION_POSTFIX "Adds -V postfix to version string" ON) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") @@ -248,6 +249,17 @@ function( add_common_options LIB_NAME) endif() endfunction(add_common_options) + +if (SYCL_ENABLE_STL_ASSERTIONS) + if(SYCL_USE_LIBCXX) + add_definitions(-D_LIBCPP_DEBUG=1) + set(SYCL_CLANG_EXTRA_FLAGS "${SYCL_CLANG_EXTRA_FLAGS} -D_LIBCPP_DEBUG=1") + else() + add_definitions(-D_GLIBCXX_ASSERTIONS=1) + set(SYCL_CLANG_EXTRA_FLAGS "${SYCL_CLANG_EXTRA_FLAGS} -D_GLIBCXX_ASSERTIONS=1") + endif() +endif() + set(SYCL_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}) # SYCL runtime library diff --git a/sycl/cmake/modules/AddSYCLExecutable.cmake b/sycl/cmake/modules/AddSYCLExecutable.cmake index 31d7f032c9cea..fd361915aeb4e 100644 --- a/sycl/cmake/modules/AddSYCLExecutable.cmake +++ b/sycl/cmake/modules/AddSYCLExecutable.cmake @@ -19,10 +19,18 @@ macro(add_sycl_executable ARG_TARGET_NAME) list(APPEND LINKED_LIBS "${LIB_PREFIX}${_lib}${LIB_POSTFIX}") endforeach() + if (SYCL_ENABLE_STL_ASSERTIONS) + if(SYCL_USE_LIBCXX) + set(_SYCL_EXTRA_FLAGS -D_LIBCPP_DEBUG=1) + else() + set(_SYCL_EXTRA_FLAGS -D_GLIBCXX_ASSERTIONS=1) + endif() + endif() + add_custom_target(${ARG_TARGET_NAME}_exec ALL COMMAND ${DEVICE_COMPILER_EXECUTABLE} -fsycl ${ARG_SOURCES} -o ${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET_NAME} - ${LINKED_LIBS} ${ARG_OPTIONS} + ${LINKED_LIBS} ${ARG_OPTIONS} ${_SYCL_EXTRA_FLAGS} BYPRODUCTS ${CMAKE_CURRENT_BINARY_DIR}/${ARG_TARGET_NAME} WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR} COMMAND_EXPAND_LISTS) diff --git a/sycl/test/lit.cfg.py b/sycl/test/lit.cfg.py index 6d06bd29918af..bb27ad2ba8b92 100644 --- a/sycl/test/lit.cfg.py +++ b/sycl/test/lit.cfg.py @@ -43,6 +43,8 @@ config.available_features.add('linux') llvm_config.with_system_environment('LD_LIBRARY_PATH') llvm_config.with_environment('LD_LIBRARY_PATH', config.sycl_libs_dir, append_path=True) + llvm_config.with_system_environment('CFLAGS') + llvm_config.with_environment('CFLAGS', config.sycl_clang_extra_flags) elif platform.system() == "Windows": config.available_features.add('windows') diff --git a/sycl/test/lit.site.cfg.py.in b/sycl/test/lit.site.cfg.py.in index a8d456eddd3b5..60f724e1c3ecf 100644 --- a/sycl/test/lit.site.cfg.py.in +++ b/sycl/test/lit.site.cfg.py.in @@ -17,6 +17,7 @@ config.cuda_toolkit_include = "@CUDA_TOOLKIT_INCLUDE@" config.sycl_tools_src_dir = "@SYCL_TOOLS_SRC_DIR@" config.llvm_build_lib_dir = "@LLVM_BUILD_LIBRARY_DIRS@" config.llvm_build_bin_dir = "@LLVM_BUILD_BINARY_DIRS@" +config.sycl_clang_extra_flags = "@SYCL_CLANG_EXTRA_FLAGS@" config.llvm_enable_projects = "@LLVM_ENABLE_PROJECTS@" From 2eda5ab9d669d668478c84c6e48071ac2946bfd9 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 12:59:12 +0300 Subject: [PATCH 2/7] Enable asserions in post-commit --- .github/workflows/linux_post_commit.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/linux_post_commit.yml b/.github/workflows/linux_post_commit.yml index e6e71846dd2a8..4c44195ccdf8e 100644 --- a/.github/workflows/linux_post_commit.yml +++ b/.github/workflows/linux_post_commit.yml @@ -23,7 +23,7 @@ jobs: CONFIG=${{ matrix.config }} case $CONFIG in Default) - export ARGS="" + export ARGS="--stl-assertions" ;; SharedLibs) export ARGS="--shared-libs" From 1cb56707db9a29d2ef102c7437ddaa6923427a70 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 13:04:19 +0300 Subject: [PATCH 3/7] Revert "[SYCL] Fix UB in memory manager (#2310)" This reverts commit 4ff2eeeb69a9a21567926fc23ed9311b745ed8ef. --- sycl/source/detail/memory_manager.cpp | 38 +++++++++++++-------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index 22d8c00ec91b9..dd6291e5c5b52 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -270,7 +270,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, DstOffset[0], DstAccessRange[0], - SrcMem + SrcOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); + SrcMem + SrcOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSize[0]; size_t BufferSlicePitch = (3 == DimDst) ? DstSize[0] * DstSize[1] : 0; @@ -280,8 +280,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &SrcOffset[0], &DstAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, SrcMem, DepEvents.size(), DepEvents.data(), - &OutEvent); + HostSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { size_t InputRowPitch = (1 == DimDst) ? 0 : DstSize[0]; @@ -289,8 +288,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &DstAccessRange[0], - InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), - DepEvents.data(), &OutEvent); + InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], + &OutEvent); } } @@ -319,7 +318,7 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, /*blocking_read=*/CL_FALSE, SrcOffset[0], SrcAccessRange[0], - DstMem + DstOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); + DstMem + DstOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t BufferSlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; @@ -330,15 +329,14 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Queue, SrcMem, /*blocking_read=*/CL_FALSE, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, DstMem, DepEvents.size(), DepEvents.data(), - &OutEvent); + HostSlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { size_t RowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; Plugin.call( Queue, SrcMem, CL_FALSE, &SrcOffset[0], &SrcAccessRange[0], RowPitch, - SlicePitch, DstMem, DepEvents.size(), DepEvents.data(), &OutEvent); + SlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -363,7 +361,7 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, if (1 == DimDst && 1 == DimSrc) { Plugin.call( Queue, SrcMem, DstMem, SrcOffset[0], DstOffset[0], SrcAccessRange[0], - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SrcSlicePitch = @@ -376,12 +374,12 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], SrcRowPitch, SrcSlicePitch, DstRowPitch, - DstSlicePitch, DepEvents.size(), DepEvents.data(), &OutEvent); + DstSlicePitch, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -467,7 +465,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, PatternSize, Offset[0] * ElementSize, Range[0] * ElementSize, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); return; } throw runtime_error("Not supported configuration of fill requested", @@ -475,7 +473,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, } else { Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, &Offset[0], - &Range[0], DepEvents.size(), DepEvents.data(), &OutEvent); + &Range[0], DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -520,8 +518,8 @@ void *MemoryManager::map(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), CL_FALSE, Flags, - AccessOffset[0], BytesToMap, DepEvents.size(), DepEvents.data(), - &OutEvent, &MappedPtr); + AccessOffset[0], BytesToMap, DepEvents.size(), + DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent, &MappedPtr); return MappedPtr; } @@ -536,7 +534,7 @@ void MemoryManager::unmap(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), MappedPtr, - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent); } void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, @@ -558,7 +556,7 @@ void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, Plugin.call(SrcQueue->getHandleRef(), /* blocking */ false, DstMem, SrcMem, Len, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); } } @@ -579,7 +577,7 @@ void MemoryManager::fill_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Pattern, Length, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); } } @@ -594,7 +592,7 @@ void MemoryManager::prefetch_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Length, PI_USM_MIGRATION_TBD0, - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } } From 1ee17187cb05cb39743e5755c5ccf83ce7d5a182 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 13:07:19 +0300 Subject: [PATCH 4/7] Revert "Revert "[SYCL] Fix UB in memory manager (#2310)"" This reverts commit 1cb56707db9a29d2ef102c7437ddaa6923427a70. --- sycl/source/detail/memory_manager.cpp | 38 ++++++++++++++------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index dd6291e5c5b52..22d8c00ec91b9 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -270,7 +270,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, DstOffset[0], DstAccessRange[0], - SrcMem + SrcOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); + SrcMem + SrcOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSize[0]; size_t BufferSlicePitch = (3 == DimDst) ? DstSize[0] * DstSize[1] : 0; @@ -280,7 +280,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &SrcOffset[0], &DstAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], &OutEvent); + HostSlicePitch, SrcMem, DepEvents.size(), DepEvents.data(), + &OutEvent); } } else { size_t InputRowPitch = (1 == DimDst) ? 0 : DstSize[0]; @@ -288,8 +289,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &DstAccessRange[0], - InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], - &OutEvent); + InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), + DepEvents.data(), &OutEvent); } } @@ -318,7 +319,7 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, /*blocking_read=*/CL_FALSE, SrcOffset[0], SrcAccessRange[0], - DstMem + DstOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); + DstMem + DstOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t BufferSlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; @@ -329,14 +330,15 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Queue, SrcMem, /*blocking_read=*/CL_FALSE, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); + HostSlicePitch, DstMem, DepEvents.size(), DepEvents.data(), + &OutEvent); } } else { size_t RowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; Plugin.call( Queue, SrcMem, CL_FALSE, &SrcOffset[0], &SrcAccessRange[0], RowPitch, - SlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); + SlicePitch, DstMem, DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -361,7 +363,7 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, if (1 == DimDst && 1 == DimSrc) { Plugin.call( Queue, SrcMem, DstMem, SrcOffset[0], DstOffset[0], SrcAccessRange[0], - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SrcSlicePitch = @@ -374,12 +376,12 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], SrcRowPitch, SrcSlicePitch, DstRowPitch, - DstSlicePitch, DepEvents.size(), &DepEvents[0], &OutEvent); + DstSlicePitch, DepEvents.size(), DepEvents.data(), &OutEvent); } } else { Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -465,7 +467,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, PatternSize, Offset[0] * ElementSize, Range[0] * ElementSize, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); return; } throw runtime_error("Not supported configuration of fill requested", @@ -473,7 +475,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, } else { Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, &Offset[0], - &Range[0], DepEvents.size(), &DepEvents[0], &OutEvent); + &Range[0], DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -518,8 +520,8 @@ void *MemoryManager::map(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), CL_FALSE, Flags, - AccessOffset[0], BytesToMap, DepEvents.size(), - DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent, &MappedPtr); + AccessOffset[0], BytesToMap, DepEvents.size(), DepEvents.data(), + &OutEvent, &MappedPtr); return MappedPtr; } @@ -534,7 +536,7 @@ void MemoryManager::unmap(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), MappedPtr, - DepEvents.size(), DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, @@ -556,7 +558,7 @@ void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, Plugin.call(SrcQueue->getHandleRef(), /* blocking */ false, DstMem, SrcMem, Len, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); } } @@ -577,7 +579,7 @@ void MemoryManager::fill_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Pattern, Length, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); } } @@ -592,7 +594,7 @@ void MemoryManager::prefetch_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Length, PI_USM_MIGRATION_TBD0, - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } } From 57e3e9335bbcf981328bafb6ccb577f7acfd5bfc Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 13:09:32 +0300 Subject: [PATCH 5/7] Revert "Revert "Revert "[SYCL] Fix UB in memory manager (#2310)""" This reverts commit 1ee17187cb05cb39743e5755c5ccf83ce7d5a182. --- sycl/source/detail/memory_manager.cpp | 38 +++++++++++++-------------- 1 file changed, 18 insertions(+), 20 deletions(-) diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index 22d8c00ec91b9..dd6291e5c5b52 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -270,7 +270,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, DstOffset[0], DstAccessRange[0], - SrcMem + SrcOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); + SrcMem + SrcOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSize[0]; size_t BufferSlicePitch = (3 == DimDst) ? DstSize[0] * DstSize[1] : 0; @@ -280,8 +280,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &SrcOffset[0], &DstAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, SrcMem, DepEvents.size(), DepEvents.data(), - &OutEvent); + HostSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { size_t InputRowPitch = (1 == DimDst) ? 0 : DstSize[0]; @@ -289,8 +288,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &DstAccessRange[0], - InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), - DepEvents.data(), &OutEvent); + InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], + &OutEvent); } } @@ -319,7 +318,7 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, /*blocking_read=*/CL_FALSE, SrcOffset[0], SrcAccessRange[0], - DstMem + DstOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); + DstMem + DstOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t BufferSlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; @@ -330,15 +329,14 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Queue, SrcMem, /*blocking_read=*/CL_FALSE, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, DstMem, DepEvents.size(), DepEvents.data(), - &OutEvent); + HostSlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { size_t RowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; Plugin.call( Queue, SrcMem, CL_FALSE, &SrcOffset[0], &SrcAccessRange[0], RowPitch, - SlicePitch, DstMem, DepEvents.size(), DepEvents.data(), &OutEvent); + SlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -363,7 +361,7 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, if (1 == DimDst && 1 == DimSrc) { Plugin.call( Queue, SrcMem, DstMem, SrcOffset[0], DstOffset[0], SrcAccessRange[0], - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } else { size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SrcSlicePitch = @@ -376,12 +374,12 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], SrcRowPitch, SrcSlicePitch, DstRowPitch, - DstSlicePitch, DepEvents.size(), DepEvents.data(), &OutEvent); + DstSlicePitch, DepEvents.size(), &DepEvents[0], &OutEvent); } } else { Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -467,7 +465,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, PatternSize, Offset[0] * ElementSize, Range[0] * ElementSize, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); return; } throw runtime_error("Not supported configuration of fill requested", @@ -475,7 +473,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, } else { Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, &Offset[0], - &Range[0], DepEvents.size(), DepEvents.data(), &OutEvent); + &Range[0], DepEvents.size(), &DepEvents[0], &OutEvent); } } @@ -520,8 +518,8 @@ void *MemoryManager::map(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), CL_FALSE, Flags, - AccessOffset[0], BytesToMap, DepEvents.size(), DepEvents.data(), - &OutEvent, &MappedPtr); + AccessOffset[0], BytesToMap, DepEvents.size(), + DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent, &MappedPtr); return MappedPtr; } @@ -536,7 +534,7 @@ void MemoryManager::unmap(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), MappedPtr, - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent); } void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, @@ -558,7 +556,7 @@ void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, Plugin.call(SrcQueue->getHandleRef(), /* blocking */ false, DstMem, SrcMem, Len, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); } } @@ -579,7 +577,7 @@ void MemoryManager::fill_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Pattern, Length, DepEvents.size(), - DepEvents.data(), &OutEvent); + &DepEvents[0], &OutEvent); } } @@ -594,7 +592,7 @@ void MemoryManager::prefetch_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Length, PI_USM_MIGRATION_TBD0, - DepEvents.size(), DepEvents.data(), &OutEvent); + DepEvents.size(), &DepEvents[0], &OutEvent); } } From e91809f7ac43b799fdab6bf6d756c274d8cf2912 Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 14:58:22 +0300 Subject: [PATCH 6/7] Enable by default --- .github/workflows/linux_post_commit.yml | 2 +- buildbot/configure.py | 6 ------ sycl/CMakeLists.txt | 4 ++-- sycl/cmake/modules/AddSYCLExecutable.cmake | 2 +- 4 files changed, 4 insertions(+), 10 deletions(-) diff --git a/.github/workflows/linux_post_commit.yml b/.github/workflows/linux_post_commit.yml index 4c44195ccdf8e..e6e71846dd2a8 100644 --- a/.github/workflows/linux_post_commit.yml +++ b/.github/workflows/linux_post_commit.yml @@ -23,7 +23,7 @@ jobs: CONFIG=${{ matrix.config }} case $CONFIG in Default) - export ARGS="--stl-assertions" + export ARGS="" ;; SharedLibs) export ARGS="--shared-libs" diff --git a/buildbot/configure.py b/buildbot/configure.py index 7e746a4a5ba40..310eed6a63df3 100644 --- a/buildbot/configure.py +++ b/buildbot/configure.py @@ -25,7 +25,6 @@ def do_configure(args): libclc_targets_to_build = '' sycl_build_pi_cuda = 'OFF' sycl_werror = 'ON' - sycl_enable_stl_assertions = 'OFF' llvm_enable_assertions = 'ON' llvm_enable_doxygen = 'OFF' llvm_enable_sphinx = 'OFF' @@ -45,9 +44,6 @@ def do_configure(args): if args.no_assertions: llvm_enable_assertions = 'OFF' - if args.stl_assertions: - sycl_enable_stl_assertions = 'ON' - if args.docs: llvm_enable_doxygen = 'ON' llvm_enable_sphinx = 'ON' @@ -73,7 +69,6 @@ def do_configure(args): "-DSYCL_BUILD_PI_CUDA={}".format(sycl_build_pi_cuda), "-DLLVM_BUILD_TOOLS=ON", "-DSYCL_ENABLE_WERROR={}".format(sycl_werror), - "-DSYCL_ENABLE_STL_ASSERTIONS={}".format(sycl_enable_stl_assertions), "-DCMAKE_INSTALL_PREFIX={}".format(install_dir), "-DSYCL_INCLUDE_TESTS=ON", # Explicitly include all kinds of SYCL tests. "-DLLVM_ENABLE_DOXYGEN={}".format(llvm_enable_doxygen), @@ -134,7 +129,6 @@ def main(): metavar="BUILD_TYPE", default="Release", help="build type: Debug, Release") parser.add_argument("--cuda", action='store_true', help="switch from OpenCL to CUDA") parser.add_argument("--no-assertions", action='store_true', help="build without assertions") - parser.add_argument("--stl-assertions", action='store_true', help="build with STL assertions") parser.add_argument("--docs", action='store_true', help="build Doxygen documentation") parser.add_argument("--system-ocl", action='store_true', help="use OpenCL deps from system (no download)") parser.add_argument("--no-werror", action='store_true', help="Don't treat warnings as errors") diff --git a/sycl/CMakeLists.txt b/sycl/CMakeLists.txt index a8d4fa69ef257..7dde4b4515322 100644 --- a/sycl/CMakeLists.txt +++ b/sycl/CMakeLists.txt @@ -6,7 +6,7 @@ set(CMAKE_CXX_STANDARD 14) set(CMAKE_CXX_STANDARD_REQUIRED ON) set(CMAKE_CXX_EXTENSIONS OFF) option(SYCL_ENABLE_WERROR "Treat all warnings as errors in SYCL project" OFF) -option(SYCL_ENABLE_STL_ASSERTIONS "Enable assertions in STL containers" OFF) +option(SYCL_DISABLE_STL_ASSERTIONS "Disable assertions in STL containers" OFF) option(SYCL_ADD_DEV_VERSION_POSTFIX "Adds -V postfix to version string" ON) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules") @@ -250,7 +250,7 @@ function( add_common_options LIB_NAME) endfunction(add_common_options) -if (SYCL_ENABLE_STL_ASSERTIONS) +if (LLVM_ENABLE_ASSERTIONS AND NOT SYCL_DISABLE_STL_ASSERTIONS) if(SYCL_USE_LIBCXX) add_definitions(-D_LIBCPP_DEBUG=1) set(SYCL_CLANG_EXTRA_FLAGS "${SYCL_CLANG_EXTRA_FLAGS} -D_LIBCPP_DEBUG=1") diff --git a/sycl/cmake/modules/AddSYCLExecutable.cmake b/sycl/cmake/modules/AddSYCLExecutable.cmake index fd361915aeb4e..e76e8dc2b8c48 100644 --- a/sycl/cmake/modules/AddSYCLExecutable.cmake +++ b/sycl/cmake/modules/AddSYCLExecutable.cmake @@ -19,7 +19,7 @@ macro(add_sycl_executable ARG_TARGET_NAME) list(APPEND LINKED_LIBS "${LIB_PREFIX}${_lib}${LIB_POSTFIX}") endforeach() - if (SYCL_ENABLE_STL_ASSERTIONS) + if (LLVM_ENABLE_ASSERTIONS AND NOT SYCL_DISABLE_STL_ASSERTIONS) if(SYCL_USE_LIBCXX) set(_SYCL_EXTRA_FLAGS -D_LIBCPP_DEBUG=1) else() From 78cd42f2c679097dbc35155cd88eef758ac672fc Mon Sep 17 00:00:00 2001 From: Alexander Batashev Date: Mon, 17 Aug 2020 15:12:04 +0300 Subject: [PATCH 7/7] Revert "Revert "Revert "Revert "[SYCL] Fix UB in memory manager (#2310)"""" This reverts commit 57e3e9335bbcf981328bafb6ccb577f7acfd5bfc. --- sycl/source/detail/memory_manager.cpp | 38 ++++++++++++++------------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/sycl/source/detail/memory_manager.cpp b/sycl/source/detail/memory_manager.cpp index dd6291e5c5b52..22d8c00ec91b9 100644 --- a/sycl/source/detail/memory_manager.cpp +++ b/sycl/source/detail/memory_manager.cpp @@ -270,7 +270,7 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, DstOffset[0], DstAccessRange[0], - SrcMem + SrcOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); + SrcMem + SrcOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t BufferRowPitch = (1 == DimDst) ? 0 : DstSize[0]; size_t BufferSlicePitch = (3 == DimDst) ? DstSize[0] * DstSize[1] : 0; @@ -280,7 +280,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &SrcOffset[0], &DstAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], &OutEvent); + HostSlicePitch, SrcMem, DepEvents.size(), DepEvents.data(), + &OutEvent); } } else { size_t InputRowPitch = (1 == DimDst) ? 0 : DstSize[0]; @@ -288,8 +289,8 @@ void copyH2D(SYCLMemObjI *SYCLMemObj, char *SrcMem, QueueImplPtr, Plugin.call( Queue, DstMem, /*blocking_write=*/CL_FALSE, &DstOffset[0], &DstAccessRange[0], - InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), &DepEvents[0], - &OutEvent); + InputRowPitch, InputSlicePitch, SrcMem, DepEvents.size(), + DepEvents.data(), &OutEvent); } } @@ -318,7 +319,7 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, /*blocking_read=*/CL_FALSE, SrcOffset[0], SrcAccessRange[0], - DstMem + DstOffset[0], DepEvents.size(), &DepEvents[0], &OutEvent); + DstMem + DstOffset[0], DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t BufferRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t BufferSlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; @@ -329,14 +330,15 @@ void copyD2H(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Queue, SrcMem, /*blocking_read=*/CL_FALSE, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], BufferRowPitch, BufferSlicePitch, HostRowPitch, - HostSlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); + HostSlicePitch, DstMem, DepEvents.size(), DepEvents.data(), + &OutEvent); } } else { size_t RowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SlicePitch = (3 == DimSrc) ? SrcSize[0] * SrcSize[1] : 0; Plugin.call( Queue, SrcMem, CL_FALSE, &SrcOffset[0], &SrcAccessRange[0], RowPitch, - SlicePitch, DstMem, DepEvents.size(), &DepEvents[0], &OutEvent); + SlicePitch, DstMem, DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -361,7 +363,7 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, if (1 == DimDst && 1 == DimSrc) { Plugin.call( Queue, SrcMem, DstMem, SrcOffset[0], DstOffset[0], SrcAccessRange[0], - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } else { size_t SrcRowPitch = (1 == DimSrc) ? 0 : SrcSize[0]; size_t SrcSlicePitch = @@ -374,12 +376,12 @@ void copyD2D(SYCLMemObjI *SYCLMemObj, RT::PiMem SrcMem, QueueImplPtr SrcQueue, Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], SrcRowPitch, SrcSlicePitch, DstRowPitch, - DstSlicePitch, DepEvents.size(), &DepEvents[0], &OutEvent); + DstSlicePitch, DepEvents.size(), DepEvents.data(), &OutEvent); } } else { Plugin.call( Queue, SrcMem, DstMem, &SrcOffset[0], &DstOffset[0], &SrcAccessRange[0], - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -465,7 +467,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, PatternSize, Offset[0] * ElementSize, Range[0] * ElementSize, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); return; } throw runtime_error("Not supported configuration of fill requested", @@ -473,7 +475,7 @@ void MemoryManager::fill(SYCLMemObjI *SYCLMemObj, void *Mem, QueueImplPtr Queue, } else { Plugin.call( Queue->getHandleRef(), pi::cast(Mem), Pattern, &Offset[0], - &Range[0], DepEvents.size(), &DepEvents[0], &OutEvent); + &Range[0], DepEvents.size(), DepEvents.data(), &OutEvent); } } @@ -518,8 +520,8 @@ void *MemoryManager::map(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), CL_FALSE, Flags, - AccessOffset[0], BytesToMap, DepEvents.size(), - DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent, &MappedPtr); + AccessOffset[0], BytesToMap, DepEvents.size(), DepEvents.data(), + &OutEvent, &MappedPtr); return MappedPtr; } @@ -534,7 +536,7 @@ void MemoryManager::unmap(SYCLMemObjI *, void *Mem, QueueImplPtr Queue, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), pi::cast(Mem), MappedPtr, - DepEvents.size(), DepEvents.empty() ? nullptr : &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, @@ -556,7 +558,7 @@ void MemoryManager::copy_usm(const void *SrcMem, QueueImplPtr SrcQueue, Plugin.call(SrcQueue->getHandleRef(), /* blocking */ false, DstMem, SrcMem, Len, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); } } @@ -577,7 +579,7 @@ void MemoryManager::fill_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Pattern, Length, DepEvents.size(), - &DepEvents[0], &OutEvent); + DepEvents.data(), &OutEvent); } } @@ -592,7 +594,7 @@ void MemoryManager::prefetch_usm(void *Mem, QueueImplPtr Queue, size_t Length, const detail::plugin &Plugin = Queue->getPlugin(); Plugin.call( Queue->getHandleRef(), Mem, Length, PI_USM_MIGRATION_TBD0, - DepEvents.size(), &DepEvents[0], &OutEvent); + DepEvents.size(), DepEvents.data(), &OutEvent); } }