From 717a3985611ff91482af611d1b3334f2beb9e6b7 Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Wed, 26 Mar 2025 18:55:42 +0100 Subject: [PATCH 1/7] [SYCL] Optimize handler::StoreLambda implemnation Current implemenation creates descriptions of all kernal params, then process them in turn. It's prossible to process each param right away. --- sycl/include/sycl/handler.hpp | 38 ++++++++++++++++----------- sycl/source/handler.cpp | 35 +++++++++++++++++++++++- sycl/test/abi/sycl_symbols_linux.dump | 2 ++ 3 files changed, 58 insertions(+), 17 deletions(-) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index ff2a906734328..75a3fb567aa86 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -375,16 +375,6 @@ template bool range_size_fits_in_size_t(const range &r) { return true; } -template -std::vector getKernelParamDescs() { - std::vector Result; - int NumParams = getKernelNumParams(); - Result.reserve(NumParams); - for (int I = 0; I < NumParams; ++I) { - Result.push_back(getKernelParamDesc(I)); - } - return Result; -} } // namespace detail /// Command group handler class. @@ -476,16 +466,23 @@ class __SYCL_EXPORT handler { "a single kernel or explicit memory operation."); } - /// Extracts and prepares kernel arguments from the lambda using information - /// from the built-ins or integration header. +#ifndef __INTEL_PREVIEW_BREAKING_CHANGES +// TODO: Those functions are not used anymore, remove it in the next +// ABI-breaking window. void extractArgsAndReqsFromLambda( char *LambdaPtr, const std::vector &ParamDescs, bool IsESIMD); - // TODO Unused, remove during ABI breaking window void extractArgsAndReqsFromLambda(char *LambdaPtr, size_t KernelArgsNum, const detail::kernel_param_desc_t *KernelArgs, bool IsESIMD); +#endif + /// Extracts and prepares kernel arguments from the lambda using information + /// from the built-ins or integration header. + void + extractArgsAndReqsFromLambda(char *LambdaPtr, + const detail::kernel_param_desc_t &ParamDesc, + bool IsESIMD, size_t Index, size_t &IndexShift); /// Extracts and prepares kernel arguments set via set_arg(s). void extractArgsAndReqs(); @@ -752,10 +749,18 @@ class __SYCL_EXPORT handler { // header, so don't perform things that require it. if (KernelHasName) { // TODO support ESIMD in no-integration-header case too. + + size_t NumParams = detail::getKernelNumParams(); clearArgs(); - extractArgsAndReqsFromLambda(MHostKernel->getPtr(), - detail::getKernelParamDescs(), - detail::isKernelESIMD()); + reseveArgs(NumParams); + + char *LambdaPtr = MHostKernel->getPtr(); + + for (size_t I = 0, IndexShift = 0; I < NumParams; ++I) { + const detail::kernel_param_desc_t param = detail::getKernelParamDesc(I); + extractArgsAndReqsFromLambda(LambdaPtr, param, detail::isKernelESIMD(), I, IndexShift); + } + MKernelName = detail::getKernelName(); } else { // In case w/o the integration header it is necessary to process @@ -3816,6 +3821,7 @@ class __SYCL_EXPORT handler { void addArg(detail::kernel_param_kind_t ArgKind, void *Req, int AccessTarget, int ArgIndex); void clearArgs(); + void reseveArgs(int NumParams); void setArgsToAssociatedAccessors(); bool HasAssociatedAccessor(detail::AccessorImplHost *Req, diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index 9eee74d397cbe..a9abf196cd31e 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -1065,6 +1065,37 @@ void handler::extractArgsAndReqs() { } } +void handler::extractArgsAndReqsFromLambda( + char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, + bool IsESIMD, size_t Index, size_t &IndexShift) { + void *Ptr = LambdaPtr + ParamDesc.offset; + const detail::kernel_param_kind_t &Kind = ParamDesc.kind; + const int &Size = ParamDesc.info; + if (Kind == detail::kernel_param_kind_t::kind_accessor) { + // For args kind of accessor Size is information about accessor. + // The first 11 bits of Size encodes the accessor target. + const access::target AccTarget = + static_cast(Size & AccessTargetMask); + if ((AccTarget == access::target::device || + AccTarget == access::target::constant_buffer) || + (AccTarget == access::target::image || + AccTarget == access::target::image_array)) { + detail::AccessorBaseHost *AccBase = + static_cast(Ptr); + Ptr = detail::getSyclObjImpl(*AccBase).get(); + } else if (AccTarget == access::target::local) { + detail::LocalAccessorBaseHost *LocalAccBase = + static_cast(Ptr); + Ptr = detail::getSyclObjImpl(*LocalAccBase).get(); + } + } + processArg(Ptr, Kind, Size, Index, IndexShift, /*IsKernelCreatedFromSource=*/false, + IsESIMD); +} + +#ifndef __INTEL_PREVIEW_BREAKING_CHANGES +// TODO: Those functions are not used anymore, remove it in the next +// ABI-breaking window. void handler::extractArgsAndReqsFromLambda( char *LambdaPtr, const std::vector &ParamDescs, bool IsESIMD) { @@ -1099,7 +1130,6 @@ void handler::extractArgsAndReqsFromLambda( } } -// TODO Unused, remove during ABI breaking window void handler::extractArgsAndReqsFromLambda( char *LambdaPtr, size_t KernelArgsNum, const detail::kernel_param_desc_t *KernelArgs, bool IsESIMD) { @@ -1107,6 +1137,7 @@ void handler::extractArgsAndReqsFromLambda( KernelArgs, KernelArgs + KernelArgsNum); extractArgsAndReqsFromLambda(LambdaPtr, ParamDescs, IsESIMD); } +#endif // __INTEL_PREVIEW_BREAKING_CHANGES // Calling methods of kernel_impl requires knowledge of class layout. // As this is impossible in header, there's a function that calls necessary @@ -2103,6 +2134,8 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req, void handler::clearArgs() { impl->MArgs.clear(); } +void handler::reseveArgs(int NumParams) { impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams); } + void handler::setArgsToAssociatedAccessors() { impl->MArgs = impl->MAssociatedAccesors; } diff --git a/sycl/test/abi/sycl_symbols_linux.dump b/sycl/test/abi/sycl_symbols_linux.dump index d16f2d2b7a131..a7d3b2c701fae 100644 --- a/sycl/test/abi/sycl_symbols_linux.dump +++ b/sycl/test/abi/sycl_symbols_linux.dump @@ -3490,6 +3490,7 @@ _ZN4sycl3_V17handler10depends_onERKSt6vectorINS0_5eventESaIS3_EE _ZN4sycl3_V17handler10depends_onERKSt6vectorISt10shared_ptrINS0_6detail10event_implEESaIS6_EE _ZN4sycl3_V17handler10mem_adviseEPKvmi _ZN4sycl3_V17handler10processArgEPvRKNS0_6detail19kernel_param_kind_tEimRmbb +_ZN4sycl3_V17handler10reseveArgsEi _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvNS0_14interop_handleEEE _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvvEE _ZN4sycl3_V17handler11copyCodeLocERKS1_ @@ -3552,6 +3553,7 @@ _ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEES3_NS0_2idILi3 _ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEEbi _ZN4sycl3_V17handler27addLifetimeSharedPtrStorageESt10shared_ptrIKvE _ZN4sycl3_V17handler27computeFallbackKernelBoundsEmm +_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKNS0_6detail19kernel_param_desc_tEbmRm _ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKSt6vectorINS0_6detail19kernel_param_desc_tESaIS5_EEb _ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcmPKNS0_6detail19kernel_param_desc_tEb _ZN4sycl3_V17handler28memcpyToHostOnlyDeviceGlobalEPKvS3_mbmm From 55c9d257ff43da96dbf2e2eb8c828eaada56f7a4 Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Wed, 26 Mar 2025 19:50:05 +0100 Subject: [PATCH 2/7] Code formatting. --- sycl/include/sycl/handler.hpp | 10 ++++++---- sycl/source/handler.cpp | 12 +++++++----- 2 files changed, 13 insertions(+), 9 deletions(-) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 75a3fb567aa86..12614b01816b2 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -467,8 +467,8 @@ class __SYCL_EXPORT handler { } #ifndef __INTEL_PREVIEW_BREAKING_CHANGES -// TODO: Those functions are not used anymore, remove it in the next -// ABI-breaking window. + // TODO: Those functions are not used anymore, remove it in the next + // ABI-breaking window. void extractArgsAndReqsFromLambda( char *LambdaPtr, const std::vector &ParamDescs, bool IsESIMD); @@ -757,8 +757,10 @@ class __SYCL_EXPORT handler { char *LambdaPtr = MHostKernel->getPtr(); for (size_t I = 0, IndexShift = 0; I < NumParams; ++I) { - const detail::kernel_param_desc_t param = detail::getKernelParamDesc(I); - extractArgsAndReqsFromLambda(LambdaPtr, param, detail::isKernelESIMD(), I, IndexShift); + extractArgsAndReqsFromLambda(LambdaPtr, + detail::getKernelParamDesc(I), + detail::isKernelESIMD(), I, + IndexShift); } MKernelName = detail::getKernelName(); diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index a9abf196cd31e..e75a277d7f1e3 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -1066,8 +1066,8 @@ void handler::extractArgsAndReqs() { } void handler::extractArgsAndReqsFromLambda( - char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, - bool IsESIMD, size_t Index, size_t &IndexShift) { + char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, bool IsESIMD, + size_t Index, size_t &IndexShift) { void *Ptr = LambdaPtr + ParamDesc.offset; const detail::kernel_param_kind_t &Kind = ParamDesc.kind; const int &Size = ParamDesc.info; @@ -1089,8 +1089,8 @@ void handler::extractArgsAndReqsFromLambda( Ptr = detail::getSyclObjImpl(*LocalAccBase).get(); } } - processArg(Ptr, Kind, Size, Index, IndexShift, /*IsKernelCreatedFromSource=*/false, - IsESIMD); + processArg(Ptr, Kind, Size, Index, IndexShift, + /*IsKernelCreatedFromSource=*/false, IsESIMD); } #ifndef __INTEL_PREVIEW_BREAKING_CHANGES @@ -2134,7 +2134,9 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req, void handler::clearArgs() { impl->MArgs.clear(); } -void handler::reseveArgs(int NumParams) { impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams); } +void handler::reseveArgs(int NumParams) { + impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams); +} void handler::setArgsToAssociatedAccessors() { impl->MArgs = impl->MAssociatedAccesors; From 9fdf613f14d3b02e7b5640dd3a91139a96af249f Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Thu, 27 Mar 2025 12:24:25 +0100 Subject: [PATCH 3/7] Cosmetic changes. --- sycl/include/sycl/handler.hpp | 15 ++++++--------- sycl/source/handler.cpp | 2 +- sycl/test/abi/sycl_symbols_linux.dump | 2 +- sycl/test/abi/sycl_symbols_windows.dump | 2 ++ 4 files changed, 10 insertions(+), 11 deletions(-) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 12614b01816b2..dbc1e2916e06b 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -750,17 +750,14 @@ class __SYCL_EXPORT handler { if (KernelHasName) { // TODO support ESIMD in no-integration-header case too. - size_t NumParams = detail::getKernelNumParams(); clearArgs(); - reseveArgs(NumParams); - - char *LambdaPtr = MHostKernel->getPtr(); + size_t NumParams = detail::getKernelNumParams(); + reserveArgs(NumParams); for (size_t I = 0, IndexShift = 0; I < NumParams; ++I) { - extractArgsAndReqsFromLambda(LambdaPtr, - detail::getKernelParamDesc(I), - detail::isKernelESIMD(), I, - IndexShift); + extractArgsAndReqsFromLambda( + MHostKernel->getPtr(), detail::getKernelParamDesc(I), + detail::isKernelESIMD(), I, IndexShift); } MKernelName = detail::getKernelName(); @@ -3823,7 +3820,7 @@ class __SYCL_EXPORT handler { void addArg(detail::kernel_param_kind_t ArgKind, void *Req, int AccessTarget, int ArgIndex); void clearArgs(); - void reseveArgs(int NumParams); + void reserveArgs(int NumParams); void setArgsToAssociatedAccessors(); bool HasAssociatedAccessor(detail::AccessorImplHost *Req, diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index e75a277d7f1e3..6234d25f4c113 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -2134,7 +2134,7 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req, void handler::clearArgs() { impl->MArgs.clear(); } -void handler::reseveArgs(int NumParams) { +void handler::reserveArgs(int NumParams) { impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams); } diff --git a/sycl/test/abi/sycl_symbols_linux.dump b/sycl/test/abi/sycl_symbols_linux.dump index a7d3b2c701fae..06ca573c6544a 100644 --- a/sycl/test/abi/sycl_symbols_linux.dump +++ b/sycl/test/abi/sycl_symbols_linux.dump @@ -3490,10 +3490,10 @@ _ZN4sycl3_V17handler10depends_onERKSt6vectorINS0_5eventESaIS3_EE _ZN4sycl3_V17handler10depends_onERKSt6vectorISt10shared_ptrINS0_6detail10event_implEESaIS6_EE _ZN4sycl3_V17handler10mem_adviseEPKvmi _ZN4sycl3_V17handler10processArgEPvRKNS0_6detail19kernel_param_kind_tEimRmbb -_ZN4sycl3_V17handler10reseveArgsEi _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvNS0_14interop_handleEEE _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvvEE _ZN4sycl3_V17handler11copyCodeLocERKS1_ +_ZN4sycl3_V17handler11reserveArgsEi _ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationE _ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationEb _ZN4sycl3_V17handler11storeRawArgEPKvm diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index 20eed583e5e4c..db50a9fe9fb02 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -3962,6 +3962,7 @@ ?ext_oneapi_wait_external_semaphore@queue@_V1@sycl@@QEAA?AVevent@23@Uexternal_semaphore@experimental@oneapi@ext@23@_KAEBV?$vector@Vevent@_V1@sycl@@V?$allocator@Vevent@_V1@sycl@@@std@@@std@@AEBUcode_location@detail@23@@Z ?ext_oneapi_wait_external_semaphore@queue@_V1@sycl@@QEAA?AVevent@23@Uexternal_semaphore@experimental@oneapi@ext@23@_KV423@AEBUcode_location@detail@23@@Z ?extractArgsAndReqs@handler@_V1@sycl@@AEAAXXZ +?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBUkernel_param_desc_t@detail@23@_N_KAEA_K@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBV?$vector@Ukernel_param_desc_t@detail@_V1@sycl@@V?$allocator@Ukernel_param_desc_t@detail@_V1@sycl@@@std@@@std@@_N@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEAD_KPEBUkernel_param_desc_t@detail@23@_N@Z ?fill_impl@handler@_V1@sycl@@AEAAXPEAXPEBX_K2@Z @@ -4299,6 +4300,7 @@ ?remquo_impl@detail@_V1@sycl@@YA?AVhalf@half_impl@123@V45123@0PEAH@Z ?remquo_impl@detail@_V1@sycl@@YAMMMPEAH@Z ?remquo_impl@detail@_V1@sycl@@YANNNPEAH@Z +?reserveArgs@handler@_V1@sycl@@AEAAXH@Z ?reserve_virtual_mem@experimental@oneapi@ext@_V1@sycl@@YA_K_K0AEBVcontext@45@@Z ?reset@filter_selector@ONEAPI@_V1@sycl@@QEBAXXZ ?reset@filter_selector@oneapi@ext@_V1@sycl@@QEBAXXZ From 84eaf62753766805c4933ed1df4335a172ddea77 Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Thu, 27 Mar 2025 19:39:07 +0100 Subject: [PATCH 4/7] Move loop over args inside handler::extractArgsAndReqsFromLambda() --- sycl/include/sycl/handler.hpp | 18 +++----- sycl/source/handler.cpp | 56 +++++++++++++------------ sycl/test/abi/sycl_symbols_linux.dump | 3 +- sycl/test/abi/sycl_symbols_windows.dump | 1 - 4 files changed, 36 insertions(+), 42 deletions(-) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index dbc1e2916e06b..13acb26cd62e9 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -481,8 +481,8 @@ class __SYCL_EXPORT handler { /// from the built-ins or integration header. void extractArgsAndReqsFromLambda(char *LambdaPtr, - const detail::kernel_param_desc_t &ParamDesc, - bool IsESIMD, size_t Index, size_t &IndexShift); + detail::kernel_param_desc_t (*ParamDescGetter)(int), + size_t NumKernelParams, bool IsESIMD); /// Extracts and prepares kernel arguments set via set_arg(s). void extractArgsAndReqs(); @@ -751,15 +751,10 @@ class __SYCL_EXPORT handler { // TODO support ESIMD in no-integration-header case too. clearArgs(); - size_t NumParams = detail::getKernelNumParams(); - reserveArgs(NumParams); - - for (size_t I = 0, IndexShift = 0; I < NumParams; ++I) { - extractArgsAndReqsFromLambda( - MHostKernel->getPtr(), detail::getKernelParamDesc(I), - detail::isKernelESIMD(), I, IndexShift); - } - + extractArgsAndReqsFromLambda( + MHostKernel->getPtr(), &(detail::getKernelParamDesc), + detail::getKernelNumParams(), + detail::isKernelESIMD()); MKernelName = detail::getKernelName(); } else { // In case w/o the integration header it is necessary to process @@ -3820,7 +3815,6 @@ class __SYCL_EXPORT handler { void addArg(detail::kernel_param_kind_t ArgKind, void *Req, int AccessTarget, int ArgIndex); void clearArgs(); - void reserveArgs(int NumParams); void setArgsToAssociatedAccessors(); bool HasAssociatedAccessor(detail::AccessorImplHost *Req, diff --git a/sycl/source/handler.cpp b/sycl/source/handler.cpp index 6234d25f4c113..b2ecb33729be5 100644 --- a/sycl/source/handler.cpp +++ b/sycl/source/handler.cpp @@ -1066,31 +1066,37 @@ void handler::extractArgsAndReqs() { } void handler::extractArgsAndReqsFromLambda( - char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, bool IsESIMD, - size_t Index, size_t &IndexShift) { - void *Ptr = LambdaPtr + ParamDesc.offset; - const detail::kernel_param_kind_t &Kind = ParamDesc.kind; - const int &Size = ParamDesc.info; - if (Kind == detail::kernel_param_kind_t::kind_accessor) { - // For args kind of accessor Size is information about accessor. - // The first 11 bits of Size encodes the accessor target. - const access::target AccTarget = - static_cast(Size & AccessTargetMask); - if ((AccTarget == access::target::device || - AccTarget == access::target::constant_buffer) || - (AccTarget == access::target::image || - AccTarget == access::target::image_array)) { - detail::AccessorBaseHost *AccBase = - static_cast(Ptr); - Ptr = detail::getSyclObjImpl(*AccBase).get(); - } else if (AccTarget == access::target::local) { - detail::LocalAccessorBaseHost *LocalAccBase = - static_cast(Ptr); - Ptr = detail::getSyclObjImpl(*LocalAccBase).get(); + char *LambdaPtr, detail::kernel_param_desc_t (*ParamDescGetter)(int), + size_t NumKernelParams, bool IsESIMD) { + size_t IndexShift = 0; + impl->MArgs.reserve(MaxNumAdditionalArgs * NumKernelParams); + + for (size_t I = 0; I < NumKernelParams; ++I) { + detail::kernel_param_desc_t ParamDesc = ParamDescGetter(I); + void *Ptr = LambdaPtr + ParamDesc.offset; + const detail::kernel_param_kind_t &Kind = ParamDesc.kind; + const int &Size = ParamDesc.info; + if (Kind == detail::kernel_param_kind_t::kind_accessor) { + // For args kind of accessor Size is information about accessor. + // The first 11 bits of Size encodes the accessor target. + const access::target AccTarget = + static_cast(Size & AccessTargetMask); + if ((AccTarget == access::target::device || + AccTarget == access::target::constant_buffer) || + (AccTarget == access::target::image || + AccTarget == access::target::image_array)) { + detail::AccessorBaseHost *AccBase = + static_cast(Ptr); + Ptr = detail::getSyclObjImpl(*AccBase).get(); + } else if (AccTarget == access::target::local) { + detail::LocalAccessorBaseHost *LocalAccBase = + static_cast(Ptr); + Ptr = detail::getSyclObjImpl(*LocalAccBase).get(); + } } + processArg(Ptr, Kind, Size, I, IndexShift, + /*IsKernelCreatedFromSource=*/false, IsESIMD); } - processArg(Ptr, Kind, Size, Index, IndexShift, - /*IsKernelCreatedFromSource=*/false, IsESIMD); } #ifndef __INTEL_PREVIEW_BREAKING_CHANGES @@ -2134,10 +2140,6 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req, void handler::clearArgs() { impl->MArgs.clear(); } -void handler::reserveArgs(int NumParams) { - impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams); -} - void handler::setArgsToAssociatedAccessors() { impl->MArgs = impl->MAssociatedAccesors; } diff --git a/sycl/test/abi/sycl_symbols_linux.dump b/sycl/test/abi/sycl_symbols_linux.dump index 06ca573c6544a..63fa93e1d433d 100644 --- a/sycl/test/abi/sycl_symbols_linux.dump +++ b/sycl/test/abi/sycl_symbols_linux.dump @@ -3493,7 +3493,6 @@ _ZN4sycl3_V17handler10processArgEPvRKNS0_6detail19kernel_param_kind_tEimRmbb _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvNS0_14interop_handleEEE _ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvvEE _ZN4sycl3_V17handler11copyCodeLocERKS1_ -_ZN4sycl3_V17handler11reserveArgsEi _ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationE _ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationEb _ZN4sycl3_V17handler11storeRawArgEPKvm @@ -3553,9 +3552,9 @@ _ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEES3_NS0_2idILi3 _ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEEbi _ZN4sycl3_V17handler27addLifetimeSharedPtrStorageESt10shared_ptrIKvE _ZN4sycl3_V17handler27computeFallbackKernelBoundsEmm -_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKNS0_6detail19kernel_param_desc_tEbmRm _ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKSt6vectorINS0_6detail19kernel_param_desc_tESaIS5_EEb _ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcmPKNS0_6detail19kernel_param_desc_tEb +_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcPFNS0_6detail19kernel_param_desc_tEiEmb _ZN4sycl3_V17handler28memcpyToHostOnlyDeviceGlobalEPKvS3_mbmm _ZN4sycl3_V17handler28setArgsToAssociatedAccessorsEv _ZN4sycl3_V17handler28setStateExplicitKernelBundleEv diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index db50a9fe9fb02..987d3e80686ae 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -4300,7 +4300,6 @@ ?remquo_impl@detail@_V1@sycl@@YA?AVhalf@half_impl@123@V45123@0PEAH@Z ?remquo_impl@detail@_V1@sycl@@YAMMMPEAH@Z ?remquo_impl@detail@_V1@sycl@@YANNNPEAH@Z -?reserveArgs@handler@_V1@sycl@@AEAAXH@Z ?reserve_virtual_mem@experimental@oneapi@ext@_V1@sycl@@YA_K_K0AEBVcontext@45@@Z ?reset@filter_selector@ONEAPI@_V1@sycl@@QEBAXXZ ?reset@filter_selector@oneapi@ext@_V1@sycl@@QEBAXXZ From 7c6895cfd900a2d3046cdb6150e1359830b1eaef Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Fri, 28 Mar 2025 07:32:10 +0100 Subject: [PATCH 5/7] Code formatting. Add newly exported Windows symbol. --- sycl/include/sycl/handler.hpp | 15 +++++++-------- sycl/test/abi/sycl_symbols_windows.dump | 1 + 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 13acb26cd62e9..16514f94075a2 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -479,10 +479,9 @@ class __SYCL_EXPORT handler { #endif /// Extracts and prepares kernel arguments from the lambda using information /// from the built-ins or integration header. - void - extractArgsAndReqsFromLambda(char *LambdaPtr, - detail::kernel_param_desc_t (*ParamDescGetter)(int), - size_t NumKernelParams, bool IsESIMD); + void extractArgsAndReqsFromLambda( + char *LambdaPtr, detail::kernel_param_desc_t (*ParamDescGetter)(int), + size_t NumKernelParams, bool IsESIMD); /// Extracts and prepares kernel arguments set via set_arg(s). void extractArgsAndReqs(); @@ -751,10 +750,10 @@ class __SYCL_EXPORT handler { // TODO support ESIMD in no-integration-header case too. clearArgs(); - extractArgsAndReqsFromLambda( - MHostKernel->getPtr(), &(detail::getKernelParamDesc), - detail::getKernelNumParams(), - detail::isKernelESIMD()); + extractArgsAndReqsFromLambda(MHostKernel->getPtr(), + &(detail::getKernelParamDesc), + detail::getKernelNumParams(), + detail::isKernelESIMD()); MKernelName = detail::getKernelName(); } else { // In case w/o the integration header it is necessary to process diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index 987d3e80686ae..4fce781e2604e 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -3964,6 +3964,7 @@ ?extractArgsAndReqs@handler@_V1@sycl@@AEAAXXZ ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBUkernel_param_desc_t@detail@23@_N_KAEA_K@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBV?$vector@Ukernel_param_desc_t@detail@_V1@sycl@@V?$allocator@Ukernel_param_desc_t@detail@_V1@sycl@@@std@@@std@@_N@Z +?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADP6A?AUkernel_param_desc_t@detail@23@H@Z_K_N@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEAD_KPEBUkernel_param_desc_t@detail@23@_N@Z ?fill_impl@handler@_V1@sycl@@AEAAXPEAXPEBX_K2@Z ?finalize@handler@_V1@sycl@@AEAA?AVevent@23@XZ From 312f59ce556223386888160a6308c63ec9f62f78 Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Wed, 2 Apr 2025 12:03:19 +0200 Subject: [PATCH 6/7] Conditionally remove handler::processArg from ABI. --- sycl/include/sycl/handler.hpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sycl/include/sycl/handler.hpp b/sycl/include/sycl/handler.hpp index 20b9f612b382b..e283ea0a0f689 100644 --- a/sycl/include/sycl/handler.hpp +++ b/sycl/include/sycl/handler.hpp @@ -495,6 +495,10 @@ class __SYCL_EXPORT handler { /// Extracts and prepares kernel arguments set via set_arg(s). void extractArgsAndReqs(); +#if defined(__INTEL_PREVIEW_BREAKING_CHANGES) + // TODO: processArg need not to be public + __SYCL_DLL_LOCAL +#endif void processArg(void *Ptr, const detail::kernel_param_kind_t &Kind, const int Size, const size_t Index, size_t &IndexShift, bool IsKernelCreatedFromSource, bool IsESIMD); From 3ce04a159a15cb57ba422e48c58ce4f8e4d436ab Mon Sep 17 00:00:00 2001 From: Alexandr Konovalov Date: Wed, 2 Apr 2025 14:04:00 +0200 Subject: [PATCH 7/7] Add newly exported Windows symbol. --- sycl/test/abi/sycl_symbols_windows.dump | 1 - 1 file changed, 1 deletion(-) diff --git a/sycl/test/abi/sycl_symbols_windows.dump b/sycl/test/abi/sycl_symbols_windows.dump index c477825cfc1ff..8cfa503ed210c 100644 --- a/sycl/test/abi/sycl_symbols_windows.dump +++ b/sycl/test/abi/sycl_symbols_windows.dump @@ -3986,7 +3986,6 @@ ?ext_oneapi_wait_external_semaphore@queue@_V1@sycl@@QEAA?AVevent@23@Uexternal_semaphore@experimental@oneapi@ext@23@_KAEBV?$vector@Vevent@_V1@sycl@@V?$allocator@Vevent@_V1@sycl@@@std@@@std@@AEBUcode_location@detail@23@@Z ?ext_oneapi_wait_external_semaphore@queue@_V1@sycl@@QEAA?AVevent@23@Uexternal_semaphore@experimental@oneapi@ext@23@_KV423@AEBUcode_location@detail@23@@Z ?extractArgsAndReqs@handler@_V1@sycl@@AEAAXXZ -?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBUkernel_param_desc_t@detail@23@_N_KAEA_K@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADAEBV?$vector@Ukernel_param_desc_t@detail@_V1@sycl@@V?$allocator@Ukernel_param_desc_t@detail@_V1@sycl@@@std@@@std@@_N@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEADP6A?AUkernel_param_desc_t@detail@23@H@Z_K_N@Z ?extractArgsAndReqsFromLambda@handler@_V1@sycl@@AEAAXPEAD_KPEBUkernel_param_desc_t@detail@23@_N@Z