Skip to content

[SYCL] Allocate SubmissionInfo completely on stack #18314

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
Merged
Show file tree
Hide file tree
Changes from 7 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 5 additions & 5 deletions sycl/include/sycl/detail/optional.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -63,15 +63,15 @@ template <typename T> class optional {
template <typename U> optional &operator=(const optional<U> &Other) {
if (has_value())
reinterpret_cast<T *>(Storage)->~T();
ContainsValue = Other;
new (Storage) T(Other.Value);
ContainsValue = bool(Other);
new (Storage) T(Other.value());
return *this;
}
template <typename U> optional &operator=(optional<U> &&Other) noexcept {
if (has_value())
reinterpret_cast<T *>(Storage)->~T();
ContainsValue = Other;
new (Storage) T(std::move(Other.Value));
ContainsValue = bool(Other);
new (Storage) T(std::move(Other.value()));
return *this;
}

Expand All @@ -94,7 +94,7 @@ template <typename T> class optional {
template <typename U> optional &operator=(const std::optional<U> &Other) {
if (has_value())
reinterpret_cast<T *>(Storage)->~T();
ContainsValue = Other;
ContainsValue = bool(Other);
if (Other)
new (Storage) T(*Other);
return *this;
Expand Down
79 changes: 73 additions & 6 deletions sycl/include/sycl/queue.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ inline event submitAssertCapture(queue &, event &, queue *,
// event &Event - event after which post processing should be executed
using SubmitPostProcessF = std::function<void(bool, bool, event &)>;

#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
struct SubmissionInfoImpl;

class __SYCL_EXPORT SubmissionInfo {
Expand All @@ -95,6 +96,63 @@ class __SYCL_EXPORT SubmissionInfo {
private:
std::shared_ptr<SubmissionInfoImpl> impl = nullptr;
};
#endif

namespace v1 {
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This way one particular data structure claims entire sycl::detail::vN namespace, so that we can't use the same approach for other APIs (that's the same reason why I think our sycl::_v1 turned out to be rather useless). IMO, it would be better to have detail::submission_info::_v1::SubmissionInfo or something like that. Maybe make submission_info inline itself.


struct SubmissionInfoImpl {
optional<detail::SubmitPostProcessF> MPostProcessorFunc = std::nullopt;
std::shared_ptr<detail::queue_impl> MSecondaryQueue = nullptr;
ext::oneapi::experimental::event_mode_enum MEventMode =
ext::oneapi::experimental::event_mode_enum::none;

SubmissionInfoImpl() = default;

#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
SubmissionInfoImpl(
const optional<detail::SubmitPostProcessF> &PostProcessorFunc,
const std::shared_ptr<detail::queue_impl> &SecondaryQueue,
const ext::oneapi::experimental::event_mode_enum &EventMode)
: MPostProcessorFunc(PostProcessorFunc), MSecondaryQueue(SecondaryQueue),
MEventMode(EventMode) {}
#endif
};

class __SYCL_EXPORT SubmissionInfo {
public:
SubmissionInfo() {}

#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
SubmissionInfo(const detail::SubmissionInfo &SI)
: impl(SI.PostProcessorFunc(), SI.SecondaryQueue(), SI.EventMode()) {}
#endif

sycl::detail::optional<SubmitPostProcessF> &PostProcessorFunc() {
return impl.MPostProcessorFunc;
}
const sycl::detail::optional<SubmitPostProcessF> &PostProcessorFunc() const {
return impl.MPostProcessorFunc;
}

std::shared_ptr<detail::queue_impl> &SecondaryQueue() {
return impl.MSecondaryQueue;
}
const std::shared_ptr<detail::queue_impl> &SecondaryQueue() const {
return impl.MSecondaryQueue;
}

ext::oneapi::experimental::event_mode_enum &EventMode() {
return impl.MEventMode;
}
const ext::oneapi::experimental::event_mode_enum &EventMode() const {
return impl.MEventMode;
}

private:
SubmissionInfoImpl impl;
};

} // namespace v1
} // namespace detail

namespace ext ::oneapi ::experimental {
Expand Down Expand Up @@ -3534,7 +3592,8 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
const sycl::detail::code_location &CodeLoc);

template <typename PropertiesT>
void ProcessSubmitProperties(PropertiesT Props, detail::SubmissionInfo &SI) {
void ProcessSubmitProperties(PropertiesT Props,
detail::v1::SubmissionInfo &SI) {
if constexpr (Props.template has_property<
ext::oneapi::experimental::event_mode_key>()) {
ext::oneapi::experimental::event_mode EventModeProp =
Expand Down Expand Up @@ -3589,17 +3648,25 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
const detail::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc);
event submit_with_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc);
void submit_without_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc);
#endif // __INTEL_PREVIEW_BREAKING_CHANGES

/// A template-free versions of submit.
event submit_with_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::v1::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc);

/// A template-free version of submit_without_event.
void submit_without_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::v1::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc);

Expand All @@ -3621,7 +3688,7 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
queue *SecondaryQueuePtr,
const detail::code_location &CodeLoc = detail::code_location::current()) {
detail::tls_code_loc_t TlsCodeLocCapture(CodeLoc);
detail::SubmissionInfo SI{};
detail::v1::SubmissionInfo SI{};
ProcessSubmitProperties(Props, SI);
if (SecondaryQueuePtr)
SI.SecondaryQueue() = detail::getSyclObjImpl(*SecondaryQueuePtr);
Expand Down Expand Up @@ -3659,7 +3726,7 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
PropertiesT Props, const detail::type_erased_cgfo_ty &CGF,
const detail::code_location &CodeLoc = detail::code_location::current()) {
detail::tls_code_loc_t TlsCodeLocCapture(CodeLoc);
detail::SubmissionInfo SI{};
detail::v1::SubmissionInfo SI{};
ProcessSubmitProperties(Props, SI);
if constexpr (UseFallbackAssert)
SI.PostProcessorFunc() = [this, &TlsCodeLocCapture](bool IsKernel,
Expand Down Expand Up @@ -3698,7 +3765,7 @@ class __SYCL_EXPORT queue : public detail::OwnerLessBase<queue> {
submit_with_event<UseFallbackAssert>(Props, CGF, CodeLoc);
} else {
detail::tls_code_loc_t TlsCodeLocCapture(CodeLoc);
detail::SubmissionInfo SI{};
detail::v1::SubmissionInfo SI{};
ProcessSubmitProperties(Props, SI);
submit_without_event_impl(CGF, SI, TlsCodeLocCapture.query(),
TlsCodeLocCapture.isToplevel());
Expand Down
4 changes: 2 additions & 2 deletions sycl/source/detail/queue_impl.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -315,7 +315,7 @@ event queue_impl::submit_impl(const detail::type_erased_cgfo_ty &CGF,
queue_impl *SecondaryQueue, bool CallerNeedsEvent,
const detail::code_location &Loc,
bool IsTopCodeLoc,
const SubmissionInfo &SubmitInfo) {
const v1::SubmissionInfo &SubmitInfo) {
handler Handler(Self, SecondaryQueue, CallerNeedsEvent);
auto &HandlerImpl = detail::getSyclObjImpl(Handler);
#ifdef XPTI_ENABLE_INSTRUMENTATION
Expand Down Expand Up @@ -424,7 +424,7 @@ event queue_impl::submitWithHandler(const std::shared_ptr<queue_impl> &Self,
const std::vector<event> &DepEvents,
bool CallerNeedsEvent,
HandlerFuncT HandlerFunc) {
SubmissionInfo SI{};
v1::SubmissionInfo SI{};
auto L = [&](handler &CGH) {
CGH.depends_on(DepEvents);
HandlerFunc(CGH);
Expand Down
8 changes: 4 additions & 4 deletions sycl/source/detail/queue_impl.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -339,7 +339,7 @@ class queue_impl {
const detail::code_location &Loc, bool IsTopCodeLoc,
const SubmitPostProcessF *PostProcess = nullptr) {
event ResEvent;
SubmissionInfo SI{};
v1::SubmissionInfo SI{};
SI.SecondaryQueue() = SecondQueue;
if (PostProcess)
SI.PostProcessorFunc() = *PostProcess;
Expand All @@ -357,7 +357,7 @@ class queue_impl {
/// \return a SYCL event object for the submitted command group.
event submit_with_event(const detail::type_erased_cgfo_ty &CGF,
const std::shared_ptr<queue_impl> &Self,
const SubmissionInfo &SubmitInfo,
const v1::SubmissionInfo &SubmitInfo,
const detail::code_location &Loc, bool IsTopCodeLoc) {

event ResEvent =
Expand All @@ -368,7 +368,7 @@ class queue_impl {

void submit_without_event(const detail::type_erased_cgfo_ty &CGF,
const std::shared_ptr<queue_impl> &Self,
const SubmissionInfo &SubmitInfo,
const v1::SubmissionInfo &SubmitInfo,
const detail::code_location &Loc,
bool IsTopCodeLoc) {
submit_impl(CGF, Self, SubmitInfo.SecondaryQueue().get(),
Expand Down Expand Up @@ -858,7 +858,7 @@ class queue_impl {
const std::shared_ptr<queue_impl> &Self,
queue_impl *SecondaryQueue, bool CallerNeedsEvent,
const detail::code_location &Loc, bool IsTopCodeLoc,
const SubmissionInfo &SubmitInfo);
const v1::SubmissionInfo &SubmitInfo);

/// Helper function for submitting a memory operation with a handler.
/// \param Self is a shared_ptr to this queue.
Expand Down
24 changes: 22 additions & 2 deletions sycl/source/queue.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@
namespace sycl {
inline namespace _V1 {

#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
namespace detail {
SubmissionInfo::SubmissionInfo()
: impl{std::make_shared<SubmissionInfoImpl>()} {}
Expand Down Expand Up @@ -51,6 +52,8 @@ SubmissionInfo::EventMode() const {
}
} // namespace detail

#endif // __INTEL_PREVIEW_BREAKING_CHANGES

queue::queue(const context &SyclContext, const device_selector &DeviceSelector,
const async_handler &AsyncHandler, const property_list &PropList) {
const std::vector<device> Devs = SyclContext.get_devices();
Expand Down Expand Up @@ -269,19 +272,36 @@ void queue::submit_without_event_impl(std::function<void(handler &)> CGH,
bool IsTopCodeLoc) {
impl->submit_without_event(CGH, impl, SubmitInfo, CodeLoc, IsTopCodeLoc);
}
#endif // __INTEL_PREVIEW_BREAKING_CHANGES

event queue::submit_with_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc) {
return impl->submit_with_event(CGH, impl, SubmitInfo, CodeLoc, IsTopCodeLoc);
detail::v1::SubmissionInfo SI{SubmitInfo};
return impl->submit_with_event(CGH, impl, SI, CodeLoc, IsTopCodeLoc);
}

void queue::submit_without_event_impl(const detail::type_erased_cgfo_ty &CGH,
const detail::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc,
bool IsTopCodeLoc) {
detail::v1::SubmissionInfo SI{SubmitInfo};
impl->submit_without_event(CGH, impl, SI, CodeLoc, IsTopCodeLoc);
}

#endif // __INTEL_PREVIEW_BREAKING_CHANGES

event queue::submit_with_event_impl(
const detail::type_erased_cgfo_ty &CGH,
const detail::v1::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc, bool IsTopCodeLoc) {
return impl->submit_with_event(CGH, impl, SubmitInfo, CodeLoc, IsTopCodeLoc);
}

void queue::submit_without_event_impl(
const detail::type_erased_cgfo_ty &CGH,
const detail::v1::SubmissionInfo &SubmitInfo,
const detail::code_location &CodeLoc, bool IsTopCodeLoc) {
impl->submit_without_event(CGH, impl, SubmitInfo, CodeLoc, IsTopCodeLoc);
}

Expand Down
2 changes: 2 additions & 0 deletions sycl/test/abi/sycl_symbols_linux.dump
Original file line number Diff line number Diff line change
Expand Up @@ -3152,10 +3152,12 @@ _ZN4sycl3_V15queue20memcpyToDeviceGlobalEPvPKvbmmRKSt6vectorINS0_5eventESaIS6_EE
_ZN4sycl3_V15queue20wait_and_throw_proxyERKNS0_6detail13code_locationE
_ZN4sycl3_V15queue22memcpyFromDeviceGlobalEPvPKvbmmRKSt6vectorINS0_5eventESaIS6_EE
_ZN4sycl3_V15queue22submit_with_event_implERKNS0_6detail19type_erased_cgfo_tyERKNS2_14SubmissionInfoERKNS2_13code_locationEb
_ZN4sycl3_V15queue22submit_with_event_implERKNS0_6detail19type_erased_cgfo_tyERKNS2_2v114SubmissionInfoERKNS2_13code_locationEb
_ZN4sycl3_V15queue22submit_with_event_implESt8functionIFvRNS0_7handlerEEERKNS0_6detail14SubmissionInfoERKNS7_13code_locationEb
_ZN4sycl3_V15queue25ext_oneapi_submit_barrierERKNS0_6detail13code_locationE
_ZN4sycl3_V15queue25ext_oneapi_submit_barrierERKSt6vectorINS0_5eventESaIS3_EERKNS0_6detail13code_locationE
_ZN4sycl3_V15queue25submit_without_event_implERKNS0_6detail19type_erased_cgfo_tyERKNS2_14SubmissionInfoERKNS2_13code_locationEb
_ZN4sycl3_V15queue25submit_without_event_implERKNS0_6detail19type_erased_cgfo_tyERKNS2_2v114SubmissionInfoERKNS2_13code_locationEb
_ZN4sycl3_V15queue25submit_without_event_implESt8functionIFvRNS0_7handlerEEERKNS0_6detail13code_locationE
_ZN4sycl3_V15queue25submit_without_event_implESt8functionIFvRNS0_7handlerEEERKNS0_6detail13code_locationEb
_ZN4sycl3_V15queue25submit_without_event_implESt8functionIFvRNS0_7handlerEEERKNS0_6detail14SubmissionInfoERKNS7_13code_locationEb
Expand Down
15 changes: 15 additions & 0 deletions sycl/test/abi/sycl_symbols_windows.dump
Original file line number Diff line number Diff line change
Expand Up @@ -308,6 +308,12 @@
??0SubmissionInfo@detail@_V1@sycl@@QEAA@$$QEAV0123@@Z
??0SubmissionInfo@detail@_V1@sycl@@QEAA@AEBV0123@@Z
??0SubmissionInfo@detail@_V1@sycl@@QEAA@XZ
??0SubmissionInfo@v1@detail@_V1@sycl@@QEAA@AEBV01234@@Z
??0SubmissionInfo@v1@detail@_V1@sycl@@QEAA@AEBV0234@@Z
??0SubmissionInfo@v1@detail@_V1@sycl@@QEAA@XZ
??0SubmissionInfo@v1@detail@_V1@sycl@@QEAA@$$QEAV01234@@Z
??4SubmissionInfo@v1@detail@_V1@sycl@@QEAAAEAV01234@AEBV01234@@Z
??4SubmissionInfo@v1@detail@_V1@sycl@@QEAAAEAV01234@$$QEAV01234@@Z
??0UnsampledImageAccessorBaseHost@detail@_V1@sycl@@IEAA@AEBV?$shared_ptr@VUnsampledImageAccessorImplHost@detail@_V1@sycl@@@std@@@Z
??0UnsampledImageAccessorBaseHost@detail@_V1@sycl@@QEAA@$$QEAV0123@@Z
??0UnsampledImageAccessorBaseHost@detail@_V1@sycl@@QEAA@AEBV0123@@Z
Expand Down Expand Up @@ -497,6 +503,7 @@
??1SYCLCategory@detail@_V1@sycl@@UEAA@XZ
??1SampledImageAccessorBaseHost@detail@_V1@sycl@@QEAA@XZ
??1SubmissionInfo@detail@_V1@sycl@@QEAA@XZ
??1SubmissionInfo@v1@detail@_V1@sycl@@QEAA@XZ
??1UnsampledImageAccessorBaseHost@detail@_V1@sycl@@QEAA@XZ
??1accelerator_selector@_V1@sycl@@UEAA@XZ
??1buffer_plain@detail@_V1@sycl@@QEAA@XZ
Expand Down Expand Up @@ -691,17 +698,23 @@
?DisableRangeRounding@handler@_V1@sycl@@AEAA_NXZ
?EventMode@SubmissionInfo@detail@_V1@sycl@@QEAAAEAW4event_mode_enum@experimental@oneapi@ext@34@XZ
?EventMode@SubmissionInfo@detail@_V1@sycl@@QEBAAEBW4event_mode_enum@experimental@oneapi@ext@34@XZ
?EventMode@SubmissionInfo@v1@detail@_V1@sycl@@QEAAAEAW4event_mode_enum@experimental@oneapi@ext@45@XZ
?EventMode@SubmissionInfo@v1@detail@_V1@sycl@@QEBAAEBW4event_mode_enum@experimental@oneapi@ext@45@XZ
?GDBMethodsAnchor@SampledImageAccessorBaseHost@detail@_V1@sycl@@IEAAXXZ
?GDBMethodsAnchor@UnsampledImageAccessorBaseHost@detail@_V1@sycl@@IEAAXXZ
?GetRangeRoundingSettings@handler@_V1@sycl@@AEAAXAEA_K00@Z
?HasAssociatedAccessor@handler@_V1@sycl@@AEBA_NPEAVAccessorImplHost@detail@23@W4target@access@23@@Z
?PostProcessorFunc@SubmissionInfo@detail@_V1@sycl@@QEAAAEAV?$optional@V?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@std@@@234@XZ
?PostProcessorFunc@SubmissionInfo@detail@_V1@sycl@@QEBAAEBV?$optional@V?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@std@@@234@XZ
?PostProcessorFunc@SubmissionInfo@v1@detail@_V1@sycl@@QEAAAEAV?$optional@V?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@std@@@345@XZ
?PostProcessorFunc@SubmissionInfo@v1@detail@_V1@sycl@@QEBAAEBV?$optional@V?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@std@@@345@XZ
?PushBack@exception_list@_V1@sycl@@AEAAX$$QEAVexception_ptr@std@@@Z
?PushBack@exception_list@_V1@sycl@@AEAAXAEBVexception_ptr@std@@@Z
?RangeRoundingTrace@handler@_V1@sycl@@AEAA_NXZ
?SecondaryQueue@SubmissionInfo@detail@_V1@sycl@@QEAAAEAV?$shared_ptr@Vqueue_impl@detail@_V1@sycl@@@std@@XZ
?SecondaryQueue@SubmissionInfo@detail@_V1@sycl@@QEBAAEBV?$shared_ptr@Vqueue_impl@detail@_V1@sycl@@@std@@XZ
?SecondaryQueue@SubmissionInfo@v1@detail@_V1@sycl@@QEAAAEAV?$shared_ptr@Vqueue_impl@detail@_V1@sycl@@@std@@XZ
?SecondaryQueue@SubmissionInfo@v1@detail@_V1@sycl@@QEBAAEBV?$shared_ptr@Vqueue_impl@detail@_V1@sycl@@@std@@XZ
?SetHostTask@handler@_V1@sycl@@AEAAX$$QEAV?$function@$$A6AXVinterop_handle@_V1@sycl@@@Z@std@@@Z
?SetHostTask@handler@_V1@sycl@@AEAAX$$QEAV?$function@$$A6AXXZ@std@@@Z
?__abs_diff_impl@_V1@sycl@@YA?AV?$vec@C$00@12@V312@0@Z
Expand Down Expand Up @@ -4407,11 +4420,13 @@
?submit_impl_and_postprocess@queue@_V1@sycl@@AEAA?AVevent@23@V?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@V123@AEBUcode_location@detail@23@AEBV?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@6@@Z
?submit_impl_and_postprocess@queue@_V1@sycl@@AEAA?AVevent@23@V?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@V123@AEBUcode_location@detail@23@AEBV?$function@$$A6AX_N0AEAVevent@_V1@sycl@@@Z@6@_N@Z
?submit_with_event_impl@queue@_V1@sycl@@AEAA?AVevent@23@AEBVtype_erased_cgfo_ty@detail@23@AEBVSubmissionInfo@623@AEBUcode_location@623@_N@Z
?submit_with_event_impl@queue@_V1@sycl@@AEAA?AVevent@23@AEBVtype_erased_cgfo_ty@detail@23@AEBVSubmissionInfo@v1@623@AEBUcode_location@623@_N@Z
?submit_with_event_impl@queue@_V1@sycl@@AEAA?AVevent@23@V?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@AEBVSubmissionInfo@detail@23@AEBUcode_location@823@_N@Z
?submit_without_event_impl@queue@_V1@sycl@@AEAAXAEBVtype_erased_cgfo_ty@detail@23@AEBVSubmissionInfo@523@AEBUcode_location@523@_N@Z
?submit_without_event_impl@queue@_V1@sycl@@AEAAXV?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@AEBUcode_location@detail@23@@Z
?submit_without_event_impl@queue@_V1@sycl@@AEAAXV?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@AEBUcode_location@detail@23@_N@Z
?submit_without_event_impl@queue@_V1@sycl@@AEAAXV?$function@$$A6AXAEAVhandler@_V1@sycl@@@Z@std@@AEBVSubmissionInfo@detail@23@AEBUcode_location@723@_N@Z
?submit_without_event_impl@queue@_V1@sycl@@AEAAXAEBVtype_erased_cgfo_ty@detail@23@AEBVSubmissionInfo@v1@523@AEBUcode_location@523@_N@Z
?supportsUSMFill2D@handler@_V1@sycl@@AEAA_NXZ
?supportsUSMMemcpy2D@handler@_V1@sycl@@AEAA_NXZ
?supportsUSMMemset2D@handler@_V1@sycl@@AEAA_NXZ
Expand Down