Skip to content

Commit 84eaf62

Browse files
Move loop over args inside handler::extractArgsAndReqsFromLambda()
1 parent 9fdf613 commit 84eaf62

File tree

4 files changed

+36
-42
lines changed

4 files changed

+36
-42
lines changed

sycl/include/sycl/handler.hpp

Lines changed: 6 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -481,8 +481,8 @@ class __SYCL_EXPORT handler {
481481
/// from the built-ins or integration header.
482482
void
483483
extractArgsAndReqsFromLambda(char *LambdaPtr,
484-
const detail::kernel_param_desc_t &ParamDesc,
485-
bool IsESIMD, size_t Index, size_t &IndexShift);
484+
detail::kernel_param_desc_t (*ParamDescGetter)(int),
485+
size_t NumKernelParams, bool IsESIMD);
486486

487487
/// Extracts and prepares kernel arguments set via set_arg(s).
488488
void extractArgsAndReqs();
@@ -751,15 +751,10 @@ class __SYCL_EXPORT handler {
751751
// TODO support ESIMD in no-integration-header case too.
752752

753753
clearArgs();
754-
size_t NumParams = detail::getKernelNumParams<KernelName>();
755-
reserveArgs(NumParams);
756-
757-
for (size_t I = 0, IndexShift = 0; I < NumParams; ++I) {
758-
extractArgsAndReqsFromLambda(
759-
MHostKernel->getPtr(), detail::getKernelParamDesc<KernelName>(I),
760-
detail::isKernelESIMD<KernelName>(), I, IndexShift);
761-
}
762-
754+
extractArgsAndReqsFromLambda(
755+
MHostKernel->getPtr(), &(detail::getKernelParamDesc<KernelName>),
756+
detail::getKernelNumParams<KernelName>(),
757+
detail::isKernelESIMD<KernelName>());
763758
MKernelName = detail::getKernelName<KernelName>();
764759
} else {
765760
// In case w/o the integration header it is necessary to process
@@ -3820,7 +3815,6 @@ class __SYCL_EXPORT handler {
38203815
void addArg(detail::kernel_param_kind_t ArgKind, void *Req, int AccessTarget,
38213816
int ArgIndex);
38223817
void clearArgs();
3823-
void reserveArgs(int NumParams);
38243818
void setArgsToAssociatedAccessors();
38253819

38263820
bool HasAssociatedAccessor(detail::AccessorImplHost *Req,

sycl/source/handler.cpp

Lines changed: 29 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1066,31 +1066,37 @@ void handler::extractArgsAndReqs() {
10661066
}
10671067

10681068
void handler::extractArgsAndReqsFromLambda(
1069-
char *LambdaPtr, const detail::kernel_param_desc_t &ParamDesc, bool IsESIMD,
1070-
size_t Index, size_t &IndexShift) {
1071-
void *Ptr = LambdaPtr + ParamDesc.offset;
1072-
const detail::kernel_param_kind_t &Kind = ParamDesc.kind;
1073-
const int &Size = ParamDesc.info;
1074-
if (Kind == detail::kernel_param_kind_t::kind_accessor) {
1075-
// For args kind of accessor Size is information about accessor.
1076-
// The first 11 bits of Size encodes the accessor target.
1077-
const access::target AccTarget =
1078-
static_cast<access::target>(Size & AccessTargetMask);
1079-
if ((AccTarget == access::target::device ||
1080-
AccTarget == access::target::constant_buffer) ||
1081-
(AccTarget == access::target::image ||
1082-
AccTarget == access::target::image_array)) {
1083-
detail::AccessorBaseHost *AccBase =
1084-
static_cast<detail::AccessorBaseHost *>(Ptr);
1085-
Ptr = detail::getSyclObjImpl(*AccBase).get();
1086-
} else if (AccTarget == access::target::local) {
1087-
detail::LocalAccessorBaseHost *LocalAccBase =
1088-
static_cast<detail::LocalAccessorBaseHost *>(Ptr);
1089-
Ptr = detail::getSyclObjImpl(*LocalAccBase).get();
1069+
char *LambdaPtr, detail::kernel_param_desc_t (*ParamDescGetter)(int),
1070+
size_t NumKernelParams, bool IsESIMD) {
1071+
size_t IndexShift = 0;
1072+
impl->MArgs.reserve(MaxNumAdditionalArgs * NumKernelParams);
1073+
1074+
for (size_t I = 0; I < NumKernelParams; ++I) {
1075+
detail::kernel_param_desc_t ParamDesc = ParamDescGetter(I);
1076+
void *Ptr = LambdaPtr + ParamDesc.offset;
1077+
const detail::kernel_param_kind_t &Kind = ParamDesc.kind;
1078+
const int &Size = ParamDesc.info;
1079+
if (Kind == detail::kernel_param_kind_t::kind_accessor) {
1080+
// For args kind of accessor Size is information about accessor.
1081+
// The first 11 bits of Size encodes the accessor target.
1082+
const access::target AccTarget =
1083+
static_cast<access::target>(Size & AccessTargetMask);
1084+
if ((AccTarget == access::target::device ||
1085+
AccTarget == access::target::constant_buffer) ||
1086+
(AccTarget == access::target::image ||
1087+
AccTarget == access::target::image_array)) {
1088+
detail::AccessorBaseHost *AccBase =
1089+
static_cast<detail::AccessorBaseHost *>(Ptr);
1090+
Ptr = detail::getSyclObjImpl(*AccBase).get();
1091+
} else if (AccTarget == access::target::local) {
1092+
detail::LocalAccessorBaseHost *LocalAccBase =
1093+
static_cast<detail::LocalAccessorBaseHost *>(Ptr);
1094+
Ptr = detail::getSyclObjImpl(*LocalAccBase).get();
1095+
}
10901096
}
1097+
processArg(Ptr, Kind, Size, I, IndexShift,
1098+
/*IsKernelCreatedFromSource=*/false, IsESIMD);
10911099
}
1092-
processArg(Ptr, Kind, Size, Index, IndexShift,
1093-
/*IsKernelCreatedFromSource=*/false, IsESIMD);
10941100
}
10951101

10961102
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
@@ -2134,10 +2140,6 @@ void handler::addArg(detail::kernel_param_kind_t ArgKind, void *Req,
21342140

21352141
void handler::clearArgs() { impl->MArgs.clear(); }
21362142

2137-
void handler::reserveArgs(int NumParams) {
2138-
impl->MArgs.reserve(MaxNumAdditionalArgs * NumParams);
2139-
}
2140-
21412143
void handler::setArgsToAssociatedAccessors() {
21422144
impl->MArgs = impl->MAssociatedAccesors;
21432145
}

sycl/test/abi/sycl_symbols_linux.dump

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3493,7 +3493,6 @@ _ZN4sycl3_V17handler10processArgEPvRKNS0_6detail19kernel_param_kind_tEimRmbb
34933493
_ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvNS0_14interop_handleEEE
34943494
_ZN4sycl3_V17handler11SetHostTaskEOSt8functionIFvvEE
34953495
_ZN4sycl3_V17handler11copyCodeLocERKS1_
3496-
_ZN4sycl3_V17handler11reserveArgsEi
34973496
_ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationE
34983497
_ZN4sycl3_V17handler11saveCodeLocENS0_6detail13code_locationEb
34993498
_ZN4sycl3_V17handler11storeRawArgEPKvm
@@ -3553,9 +3552,9 @@ _ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEES3_NS0_2idILi3
35533552
_ZN4sycl3_V17handler26setNDRangeDescriptorPaddedENS0_5rangeILi3EEEbi
35543553
_ZN4sycl3_V17handler27addLifetimeSharedPtrStorageESt10shared_ptrIKvE
35553554
_ZN4sycl3_V17handler27computeFallbackKernelBoundsEmm
3556-
_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKNS0_6detail19kernel_param_desc_tEbmRm
35573555
_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcRKSt6vectorINS0_6detail19kernel_param_desc_tESaIS5_EEb
35583556
_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcmPKNS0_6detail19kernel_param_desc_tEb
3557+
_ZN4sycl3_V17handler28extractArgsAndReqsFromLambdaEPcPFNS0_6detail19kernel_param_desc_tEiEmb
35593558
_ZN4sycl3_V17handler28memcpyToHostOnlyDeviceGlobalEPKvS3_mbmm
35603559
_ZN4sycl3_V17handler28setArgsToAssociatedAccessorsEv
35613560
_ZN4sycl3_V17handler28setStateExplicitKernelBundleEv

sycl/test/abi/sycl_symbols_windows.dump

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4300,7 +4300,6 @@
43004300
?remquo_impl@detail@_V1@sycl@@YA?AVhalf@half_impl@123@V45123@0PEAH@Z
43014301
?remquo_impl@detail@_V1@sycl@@YAMMMPEAH@Z
43024302
?remquo_impl@detail@_V1@sycl@@YANNNPEAH@Z
4303-
?reserveArgs@handler@_V1@sycl@@AEAAXH@Z
43044303
?reserve_virtual_mem@experimental@oneapi@ext@_V1@sycl@@YA_K_K0AEBVcontext@45@@Z
43054304
?reset@filter_selector@ONEAPI@_V1@sycl@@QEBAXXZ
43064305
?reset@filter_selector@oneapi@ext@_V1@sycl@@QEBAXXZ

0 commit comments

Comments
 (0)