diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 91a8d63fd8f4c..bfda64639683c 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -426,8 +426,23 @@ class __SYCL_EXPORT handler { /// \param Queue is a SYCL queue. /// \param CallerNeedsEvent indicates if the event resulting from this handler /// is needed by the caller. +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + handler(const std::shared_ptr &Queue, + bool CallerNeedsEvent); +#else handler(std::shared_ptr Queue, bool CallerNeedsEvent); +#endif +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + /// Constructs SYCL handler from the pre-constructed handler_impl and the + /// associated queue. Inside of Graph implementation, the Queue value is not + /// used, for those cases it can be initialized with an empty shared_ptr. + /// + /// \param HandlerImpl is a pre-constructed handler_impl. + /// \param Queue is a SYCL queue. + handler(detail::handler_impl *HandlerImpl, + const std::shared_ptr &Queue); +#else /// Constructs SYCL handler from the associated queue and the submission's /// primary and secondary queue. /// @@ -449,7 +464,9 @@ class __SYCL_EXPORT handler { __SYCL_DLL_LOCAL handler(std::shared_ptr Queue, detail::queue_impl *SecondaryQueue, bool CallerNeedsEvent); +#endif +#ifndef __INTEL_PREVIEW_BREAKING_CHANGES /// Constructs SYCL handler from Graph. /// /// The handler will add the command-group as a node to the graph rather than @@ -457,6 +474,7 @@ class __SYCL_EXPORT handler { /// /// \param Graph is a SYCL command_graph handler(std::shared_ptr Graph); +#endif void *storeRawArg(const void *Ptr, size_t Size); @@ -3272,8 +3290,18 @@ class __SYCL_EXPORT handler { uint64_t SignalValue); private: +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + // In some cases we need to construct handler_impl in heap. Sole propose + // of MImplOwner is to destroy handler_impl in destructor of handler. + // Can't use unique_ptr because declaration of handler_impl is not available + // in this header. + std::shared_ptr MImplOwner; + detail::handler_impl *impl; + const std::shared_ptr &MQueue; +#else std::shared_ptr impl; std::shared_ptr MQueue; +#endif std::vector MLocalAccStorage; std::vector> MStreamStorage; detail::ABINeutralKernelNameStrT MKernelName; @@ -3735,6 +3763,11 @@ class __SYCL_EXPORT handler { friend class detail::HandlerAccess; +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + __SYCL_DLL_LOCAL detail::handler_impl *get_impl() { return impl; } +#else + __SYCL_DLL_LOCAL detail::handler_impl *get_impl() { return impl.get(); } +#endif // Friend free-functions for asynchronous allocation and freeing. __SYCL_EXPORT friend void ext::oneapi::experimental::async_free(sycl::handler &h, void *ptr); diff --git a/sycl/include/sycl/reduction.hpp b/sycl/include/sycl/reduction.hpp index 7f006648b6cad..5c472268cd838 100644 --- a/sycl/include/sycl/reduction.hpp +++ b/sycl/include/sycl/reduction.hpp @@ -140,12 +140,19 @@ template ReduTupleT makeReduTupleT(Ts... Elements) { return sycl::detail::make_tuple(Elements...); } +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES +__SYCL_EXPORT size_t reduGetMaxWGSize(const std::shared_ptr &Queue, + size_t LocalMemBytesPerWorkItem); +__SYCL_EXPORT size_t reduGetPreferredWGSize( + const std::shared_ptr &Queue, size_t LocalMemBytesPerWorkItem); +#else __SYCL_EXPORT size_t reduGetMaxWGSize(std::shared_ptr Queue, size_t LocalMemBytesPerWorkItem); -__SYCL_EXPORT size_t reduComputeWGSize(size_t NWorkItems, size_t MaxWGSize, - size_t &NWorkGroups); __SYCL_EXPORT size_t reduGetPreferredWGSize(std::shared_ptr &Queue, size_t LocalMemBytesPerWorkItem); +#endif +__SYCL_EXPORT size_t reduComputeWGSize(size_t NWorkItems, size_t MaxWGSize, + size_t &NWorkGroups); template class ReducerElement; @@ -1071,7 +1078,12 @@ class reduction_impl_algo { std::shared_ptr Counter(malloc_device(1, q), Deleter); CGH.addReduction(Counter); - addCounterInit(CGH, CGH.MQueue, Counter); +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + std::shared_ptr Queue(CGH.MQueue); +#else + std::shared_ptr &Queue = CGH.MQueue; +#endif + addCounterInit(CGH, Queue, Counter); return Counter.get(); } @@ -1229,7 +1241,8 @@ template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { static_assert(Reduction::has_identity, @@ -1280,7 +1293,8 @@ struct NDRangeReduction< reduction::strategy::group_reduce_and_last_wg_detection> { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { static_assert(Reduction::has_identity, @@ -1479,7 +1493,8 @@ void doTreeReductionOnTuple(size_t WorkSize, size_t LID, template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { using reducer_type = typename Reduction::reducer_type; @@ -1590,7 +1605,8 @@ template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { static_assert(Reduction::has_identity, @@ -1626,7 +1642,8 @@ struct NDRangeReduction< reduction::strategy::local_mem_tree_and_atomic_cross_wg> { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { using reducer_type = typename Reduction::reducer_type; @@ -1687,7 +1704,8 @@ struct NDRangeReduction< reduction::strategy::group_reduce_and_multiple_kernels> { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { static_assert(Reduction::has_identity, @@ -1825,7 +1843,8 @@ struct NDRangeReduction< template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { using element_type = typename Reduction::reducer_element_type; @@ -2600,9 +2619,9 @@ tuple_select_elements(TupleT Tuple, std::index_sequence) { template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, - nd_range NDRange, PropertiesT &Properties, - RestT... Rest) { + static void + run(handler &CGH, const std::shared_ptr &Queue, + nd_range NDRange, PropertiesT &Properties, RestT... Rest) { std::tuple ArgsTuple(Rest...); constexpr size_t NumArgs = sizeof...(RestT); auto KernelFunc = std::get(ArgsTuple); @@ -2644,7 +2663,8 @@ template <> struct NDRangeReduction { template - static void run(handler &CGH, std::shared_ptr &Queue, + static void run(handler &CGH, + const std::shared_ptr &Queue, nd_range NDRange, PropertiesT &Properties, Reduction &Redu, KernelType &KernelFunc) { auto Delegate = [&](auto Impl) { @@ -2691,9 +2711,9 @@ template <> struct NDRangeReduction { } template - static void run(handler &CGH, std::shared_ptr &Queue, - nd_range NDRange, PropertiesT &Properties, - RestT... Rest) { + static void + run(handler &CGH, const std::shared_ptr &Queue, + nd_range NDRange, PropertiesT &Properties, RestT... Rest) { return Impl::run(CGH, Queue, NDRange, Properties, Rest...); } diff --git a/sycl/source/detail/graph_impl.cpp b/sycl/source/detail/graph_impl.cpp index 252fc220df70d..502629ca4471a 100644 --- a/sycl/source/detail/graph_impl.cpp +++ b/sycl/source/detail/graph_impl.cpp @@ -502,7 +502,12 @@ graph_impl::add(std::function CGF, const std::vector &Args, std::vector> &Deps) { (void)Args; +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + detail::handler_impl HandlerImpl{shared_from_this()}; + sycl::handler Handler{&HandlerImpl, std::shared_ptr{}}; +#else sycl::handler Handler{shared_from_this()}; +#endif #if XPTI_ENABLE_INSTRUMENTATION // Save code location if one was set in TLS. @@ -2183,7 +2188,12 @@ void dynamic_command_group_impl::finalizeCGFList( const auto &CGF = CGFList[CGFIndex]; // Handler defined inside the loop so it doesn't appear to the runtime // as a single command-group with multiple commands inside. +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + detail::handler_impl HandlerImpl{MGraph}; + sycl::handler Handler{&HandlerImpl, std::shared_ptr{}}; +#else sycl::handler Handler{MGraph}; +#endif CGF(Handler); if (Handler.getType() != sycl::detail::CGType::Kernel && diff --git a/sycl/source/detail/queue_impl.cpp b/sycl/source/detail/queue_impl.cpp index 05461a1490d8b..0db16ab51bf3d 100644 --- a/sycl/source/detail/queue_impl.cpp +++ b/sycl/source/detail/queue_impl.cpp @@ -316,8 +316,15 @@ event queue_impl::submit_impl(const detail::type_erased_cgfo_ty &CGF, const detail::code_location &Loc, bool IsTopCodeLoc, const SubmissionInfo &SubmitInfo) { +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + detail::handler_impl HandlerImplVal(SecondaryQueue, CallerNeedsEvent); + detail::handler_impl *HandlerImpl = &HandlerImplVal; + handler Handler(HandlerImpl, Self); +#else handler Handler(Self, SecondaryQueue, CallerNeedsEvent); auto &HandlerImpl = detail::getSyclObjImpl(Handler); +#endif + #ifdef XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { Handler.saveCodeLoc(Loc, IsTopCodeLoc); @@ -371,8 +378,14 @@ event queue_impl::submit_impl(const detail::type_erased_cgfo_ty &CGF, const detail::code_location &Loc, bool IsTopCodeLoc, const SubmissionInfo &SubmitInfo) { +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + detail::handler_impl HandlerImplVal(PrimaryQueue.get(), CallerNeedsEvent); + detail::handler_impl *HandlerImpl = &HandlerImplVal; + handler Handler(HandlerImpl, Self); +#else handler Handler(Self, CallerNeedsEvent); auto &HandlerImpl = detail::getSyclObjImpl(Handler); +#endif #if XPTI_ENABLE_INSTRUMENTATION if (xptiTraceEnabled()) { diff --git a/sycl/source/detail/reduction.cpp b/sycl/source/detail/reduction.cpp index f641241738efd..39cf63a3ba352 100644 --- a/sycl/source/detail/reduction.cpp +++ b/sycl/source/detail/reduction.cpp @@ -72,9 +72,15 @@ __SYCL_EXPORT uint32_t reduGetMaxNumConcurrentWorkGroups( return NumThreads; } +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES +__SYCL_EXPORT size_t +reduGetMaxWGSize(const std::shared_ptr &Queue, + size_t LocalMemBytesPerWorkItem) { +#else __SYCL_EXPORT size_t reduGetMaxWGSize(std::shared_ptr Queue, size_t LocalMemBytesPerWorkItem) { +#endif device Dev = Queue->get_device(); size_t MaxWGSize = Dev.get_info(); @@ -113,8 +119,13 @@ reduGetMaxWGSize(std::shared_ptr Queue, return WGSize; } +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES +__SYCL_EXPORT size_t reduGetPreferredWGSize( + const std::shared_ptr &Queue, size_t LocalMemBytesPerWorkItem) { +#else __SYCL_EXPORT size_t reduGetPreferredWGSize(std::shared_ptr &Queue, size_t LocalMemBytesPerWorkItem) { +#endif // TODO: Graphs extension explicit API uses a handler with a null queue to // process CGFs, in future we should have access to the device so we can // correctly calculate this. diff --git a/sycl/source/detail/scheduler/commands.hpp b/sycl/source/detail/scheduler/commands.hpp index 7660c2f1bc844..1acdae47d36ab 100644 --- a/sycl/source/detail/scheduler/commands.hpp +++ b/sycl/source/detail/scheduler/commands.hpp @@ -241,6 +241,7 @@ class Command { static std::vector getUrEvents(const std::vector &EventImpls, const QueueImplPtr &CommandQueue, bool IsHostTaskCommand); + /// Collect UR events from EventImpls and filter out some of them in case of /// in order queue. Does blocking enqueue if event is expected to produce ur /// event but has empty native handle. diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index b57c5d9e01e88..98e76b477c473 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -312,6 +312,20 @@ fill_copy_args(detail::handler_impl *impl, } // namespace detail +#ifdef __INTEL_PREVIEW_BREAKING_CHANGES + +handler::handler(const std::shared_ptr &Queue, + bool CallerNeedsEvent) + : MImplOwner(std::make_shared(Queue.get(), + CallerNeedsEvent)), + impl(MImplOwner.get()), MQueue(Queue) {} + +handler::handler(detail::handler_impl *HandlerImpl, + const std::shared_ptr &Queue) + : impl(HandlerImpl), MQueue(Queue) {} + +#else + handler::handler(std::shared_ptr Queue, bool CallerNeedsEvent) : impl(std::make_shared(nullptr, CallerNeedsEvent)), @@ -339,6 +353,8 @@ handler::handler( std::shared_ptr Graph) : impl(std::make_shared(Graph)) {} +#endif + // Sets the submission state to indicate that an explicit kernel bundle has been // set. Throws a sycl::exception with errc::invalid if the current state // indicates that a specialization constant has been set. @@ -1352,7 +1368,7 @@ void handler::ext_oneapi_copy( MSrcPtr = const_cast(Src); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), DestImgDesc, + detail::fill_copy_args(get_impl(), DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE); setType(detail::CGType::CopyImage); @@ -1370,7 +1386,7 @@ void handler::ext_oneapi_copy( MSrcPtr = const_cast(Src); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), DestImgDesc, + detail::fill_copy_args(get_impl(), DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE, SrcOffset, SrcExtent, DestOffset, {0, 0, 0}, CopyExtent); @@ -1387,7 +1403,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = Dest; - detail::fill_copy_args(impl.get(), SrcImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST); setType(detail::CGType::CopyImage); @@ -1406,7 +1422,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = Dest; - detail::fill_copy_args(impl.get(), SrcImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST, SrcOffset, {0, 0, 0}, DestOffset, DestExtent, CopyExtent); @@ -1430,7 +1446,7 @@ void handler::ext_oneapi_copy( if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE || ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST) { - detail::fill_copy_args(impl.get(), Desc, ImageCopyFlags, DeviceRowPitch, + detail::fill_copy_args(get_impl(), Desc, ImageCopyFlags, DeviceRowPitch, DeviceRowPitch); } else { throw sycl::exception(make_error_code(errc::invalid), @@ -1460,11 +1476,11 @@ void handler::ext_oneapi_copy( // Fill the host extent based on the type of copy. if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_DEVICE) { - detail::fill_copy_args(impl.get(), DeviceImgDesc, ImageCopyFlags, + detail::fill_copy_args(get_impl(), DeviceImgDesc, ImageCopyFlags, DeviceRowPitch, DeviceRowPitch, SrcOffset, HostExtent, DestOffset, {0, 0, 0}, CopyExtent); } else if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_HOST) { - detail::fill_copy_args(impl.get(), DeviceImgDesc, ImageCopyFlags, + detail::fill_copy_args(get_impl(), DeviceImgDesc, ImageCopyFlags, DeviceRowPitch, DeviceRowPitch, SrcOffset, {0, 0, 0}, DestOffset, HostExtent, CopyExtent); } else { @@ -1488,7 +1504,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE); setType(detail::CGType::CopyImage); @@ -1508,7 +1524,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcOffset, {0, 0, 0}, DestOffset, {0, 0, 0}, CopyExtent); @@ -1527,7 +1543,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = Dest; - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, 0, DestRowPitch); @@ -1548,7 +1564,7 @@ void handler::ext_oneapi_copy( MSrcPtr = reinterpret_cast(Src.raw_handle); MDstPtr = Dest; - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, 0, DestRowPitch, SrcOffset, {0, 0, 0}, DestOffset, {0, 0, 0}, CopyExtent); @@ -1568,7 +1584,7 @@ void handler::ext_oneapi_copy( MSrcPtr = const_cast(Src); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcRowPitch, 0); @@ -1589,7 +1605,7 @@ void handler::ext_oneapi_copy( MSrcPtr = const_cast(Src); MDstPtr = reinterpret_cast(Dest.raw_handle); - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE, SrcRowPitch, 0, SrcOffset, {0, 0, 0}, DestOffset, {0, 0, 0}, CopyExtent); @@ -1616,7 +1632,7 @@ void handler::ext_oneapi_copy( if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE || ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) { - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, ImageCopyFlags, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, ImageCopyFlags, SrcRowPitch, DestRowPitch); } else { throw sycl::exception(make_error_code(errc::invalid), @@ -1643,7 +1659,7 @@ void handler::ext_oneapi_copy( if (ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_DEVICE_TO_DEVICE || ImageCopyFlags == UR_EXP_IMAGE_COPY_FLAG_HOST_TO_HOST) { - detail::fill_copy_args(impl.get(), SrcImgDesc, DestImgDesc, ImageCopyFlags, + detail::fill_copy_args(get_impl(), SrcImgDesc, DestImgDesc, ImageCopyFlags, SrcRowPitch, DestRowPitch, SrcOffset, {0, 0, 0}, DestOffset, {0, 0, 0}, CopyExtent); } else { diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index 4ab800b1bfb6b..48817d3f3ff57 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -4148,6 +4148,7 @@ ?get_image_num_channels@experimental@oneapi@ext@_V1@sycl@@YAIUimage_mem_handle@12345@AEBVqueue@45@@Z ?get_image_range@experimental@oneapi@ext@_V1@sycl@@YA?AV?$range@$02@45@Uimage_mem_handle@12345@AEBVdevice@45@AEBVcontext@45@@Z ?get_image_range@experimental@oneapi@ext@_V1@sycl@@YA?AV?$range@$02@45@Uimage_mem_handle@12345@AEBVqueue@45@@Z +?get_impl@handler@_V1@sycl@@AEAAPEAVhandler_impl@detail@23@XZ ?get_kernel@kernel_bundle_plain@detail@_V1@sycl@@IEBA?AVkernel@34@AEBVkernel_id@34@@Z ?get_kernel_bundle@kernel@_V1@sycl@@QEBA?AV?$kernel_bundle@$01@23@XZ ?get_kernel_bundle_impl@detail@_V1@sycl@@YA?AV?$shared_ptr@Vkernel_bundle_impl@detail@_V1@sycl@@@std@@AEBVcontext@23@AEBV?$vector@Vdevice@_V1@sycl@@V?$allocator@Vdevice@_V1@sycl@@@std@@@5@AEBV?$vector@Vkernel_id@_V1@sycl@@V?$allocator@Vkernel_id@_V1@sycl@@@std@@@5@W4bundle_state@23@@Z diff --git a/sycl/unittests/scheduler/SchedulerTestUtils.hpp b/sycl/unittests/scheduler/SchedulerTestUtils.hpp index 7a48cc1523b3f..9d7b084cc38d3 100644 --- a/sycl/unittests/scheduler/SchedulerTestUtils.hpp +++ b/sycl/unittests/scheduler/SchedulerTestUtils.hpp @@ -258,7 +258,7 @@ class MockHandler : public sycl::handler { std::shared_ptr &getHostTask() { return impl->MHostTask; } - std::shared_ptr &getQueue() { return MQueue; } + const std::shared_ptr &getQueue() { return MQueue; } void setType(sycl::detail::CGType Type) { impl->MCGType = Type; }