Skip to content

Commit b6a63c9

Browse files
[NFCI] Add handler::setDeviceKernelInfo helpers
They seem to provide a better abstraction than separate `MKernelName` assignment and `setDeviceKernelInfoPtr` that describe implementation rather than the intent.
1 parent 3b3a5d1 commit b6a63c9

File tree

1 file changed

+35
-34
lines changed

1 file changed

+35
-34
lines changed

sycl/include/sycl/handler.hpp

Lines changed: 35 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -491,6 +491,25 @@ class __SYCL_EXPORT handler {
491491
"a single kernel or explicit memory operation.");
492492
}
493493

494+
template <class Kernel> void setDeviceKernelInfo(void *KernelFuncPtr) {
495+
constexpr auto Info = detail::CompileTimeKernelInfo<Kernel>;
496+
MKernelName = Info.Name;
497+
// TODO support ESIMD in no-integration-header case too.
498+
setKernelInfo(KernelFuncPtr, Info.NumParams, Info.ParamDescGetter,
499+
Info.IsESIMD, Info.HasSpecialCaptures);
500+
setDeviceKernelInfoPtr(&detail::getDeviceKernelInfo<Kernel>());
501+
setType(detail::CGType::Kernel);
502+
}
503+
504+
void setDeviceKernelInfo(kernel &&Kernel) {
505+
MKernel = detail::getSyclObjImpl(std::move(Kernel));
506+
MKernelName = getKernelName();
507+
setType(detail::CGType::Kernel);
508+
509+
// If any extra actions are added here make sure that logic around
510+
// `lambdaAndKernelHaveEqualName` calls can handle that.
511+
}
512+
494513
#ifndef __INTEL_PREVIEW_BREAKING_CHANGES
495514
// TODO: Those functions are not used anymore, remove it in the next
496515
// ABI-breaking window.
@@ -823,7 +842,6 @@ class __SYCL_EXPORT handler {
823842
detail::GetInstantiateKernelOnHostPtr<KernelType, LambdaArgType,
824843
Dims>());
825844
#endif
826-
constexpr auto Info = detail::CompileTimeKernelInfo<KernelName>;
827845

828846
// SYCL unittests are built without sycl compiler, so "host" information
829847
// about kernels isn't provided (e.g., via integration headers or compiler
@@ -836,6 +854,8 @@ class __SYCL_EXPORT handler {
836854
// don't actually execute those operation, that's why disabling
837855
// unconditional `static_asserts`s is enough for now.
838856
#ifndef __SYCL_UNITTESTS
857+
constexpr auto Info = detail::CompileTimeKernelInfo<KernelName>;
858+
839859
static_assert(Info.Name != std::string_view{}, "Kernel must have a name!");
840860

841861
// Some host compilers may have different captures from Clang. Currently
@@ -855,12 +875,7 @@ class __SYCL_EXPORT handler {
855875
"might also help.");
856876
#endif
857877

858-
// Force hasSpecialCaptures to be evaluated at compile-time.
859-
setKernelInfo((void *)MHostKernel->getPtr(), Info.NumParams,
860-
Info.ParamDescGetter, Info.IsESIMD, Info.HasSpecialCaptures);
861-
862-
MKernelName = Info.Name;
863-
setDeviceKernelInfoPtr(&detail::getDeviceKernelInfo<KernelName>());
878+
setDeviceKernelInfo<KernelName>((void *)MHostKernel->getPtr());
864879

865880
// If the kernel lambda is callable with a kernel_handler argument, manifest
866881
// the associated kernel handler.
@@ -1302,7 +1317,6 @@ class __SYCL_EXPORT handler {
13021317
setNDRangeDescriptor(RoundedRange);
13031318
StoreLambda<KName, decltype(Wrapper), Dims, TransformedArgType>(
13041319
std::move(Wrapper));
1305-
setType(detail::CGType::Kernel);
13061320
#endif
13071321
} else
13081322
#endif // !__SYCL_DISABLE_PARALLEL_FOR_RANGE_ROUNDING__ &&
@@ -1324,7 +1338,6 @@ class __SYCL_EXPORT handler {
13241338
setNDRangeDescriptor(std::move(UserRange));
13251339
StoreLambda<NameT, KernelType, Dims, TransformedArgType>(
13261340
std::move(KernelFunc));
1327-
setType(detail::CGType::Kernel);
13281341
#endif
13291342
#else
13301343
(void)KernelFunc;
@@ -1346,13 +1359,11 @@ class __SYCL_EXPORT handler {
13461359
[[maybe_unused]] kernel Kernel) {
13471360
#ifndef __SYCL_DEVICE_ONLY__
13481361
throwIfActionIsCreated();
1349-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1362+
setDeviceKernelInfo(std::move(Kernel));
13501363
detail::checkValueRange<Dims>(NumWorkItems);
13511364
setNDRangeDescriptor(std::move(NumWorkItems));
13521365
processLaunchProperties<PropertiesT>(Props);
1353-
setType(detail::CGType::Kernel);
13541366
extractArgsAndReqs();
1355-
MKernelName = getKernelName();
13561367
#endif
13571368
}
13581369

@@ -1371,13 +1382,11 @@ class __SYCL_EXPORT handler {
13711382
[[maybe_unused]] kernel Kernel) {
13721383
#ifndef __SYCL_DEVICE_ONLY__
13731384
throwIfActionIsCreated();
1374-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1385+
setDeviceKernelInfo(std::move(Kernel));
13751386
detail::checkValueRange<Dims>(NDRange);
13761387
setNDRangeDescriptor(std::move(NDRange));
13771388
processLaunchProperties(Props);
1378-
setType(detail::CGType::Kernel);
13791389
extractArgsAndReqs();
1380-
MKernelName = getKernelName();
13811390
#endif
13821391
}
13831392

@@ -1404,7 +1413,6 @@ class __SYCL_EXPORT handler {
14041413
}
14051414
throwIfActionIsCreated();
14061415
verifyUsedKernelBundleInternal(Info.Name);
1407-
setType(detail::CGType::Kernel);
14081416

14091417
detail::checkValueRange<Dims>(params...);
14101418
if constexpr (SetNumWorkGroups) {
@@ -1450,7 +1458,6 @@ class __SYCL_EXPORT handler {
14501458
// kernel.
14511459
setHandlerKernelBundle(Kernel);
14521460
verifyUsedKernelBundleInternal(Info.Name);
1453-
setType(detail::CGType::Kernel);
14541461

14551462
detail::checkValueRange<Dims>(params...);
14561463
if constexpr (SetNumWorkGroups) {
@@ -1460,12 +1467,11 @@ class __SYCL_EXPORT handler {
14601467
setNDRangeDescriptor(std::move(params)...);
14611468
}
14621469

1463-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1464-
if (!lambdaAndKernelHaveEqualName<NameT>()) {
1465-
extractArgsAndReqs();
1466-
MKernelName = getKernelName();
1467-
} else {
1470+
setDeviceKernelInfo(std::move(Kernel));
1471+
if (lambdaAndKernelHaveEqualName<NameT>()) {
14681472
StoreLambda<NameT, KernelType, Dims, ElementType>(std::move(KernelFunc));
1473+
} else {
1474+
extractArgsAndReqs();
14691475
}
14701476
processProperties<Info.IsESIMD, PropertiesT>(Props);
14711477
#endif
@@ -1845,10 +1851,8 @@ class __SYCL_EXPORT handler {
18451851
// No need to check if range is out of INT_MAX limits as it's compile-time
18461852
// known constant
18471853
setNDRangeDescriptor(range<1>{1});
1848-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1849-
setType(detail::CGType::Kernel);
1854+
setDeviceKernelInfo(std::move(Kernel));
18501855
extractArgsAndReqs();
1851-
MKernelName = getKernelName();
18521856
}
18531857

18541858
void parallel_for(range<1> NumWorkItems, kernel Kernel) {
@@ -1881,12 +1885,10 @@ class __SYCL_EXPORT handler {
18811885
[[maybe_unused]] kernel Kernel) {
18821886
#ifndef __SYCL_DEVICE_ONLY__
18831887
throwIfActionIsCreated();
1884-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1888+
setDeviceKernelInfo(std::move(Kernel));
18851889
detail::checkValueRange<Dims>(NumWorkItems, WorkItemOffset);
18861890
setNDRangeDescriptor(std::move(NumWorkItems), std::move(WorkItemOffset));
1887-
setType(detail::CGType::Kernel);
18881891
extractArgsAndReqs();
1889-
MKernelName = getKernelName();
18901892
#endif
18911893
}
18921894

@@ -1924,13 +1926,12 @@ class __SYCL_EXPORT handler {
19241926
// No need to check if range is out of INT_MAX limits as it's compile-time
19251927
// known constant
19261928
setNDRangeDescriptor(range<1>{1});
1927-
MKernel = detail::getSyclObjImpl(std::move(Kernel));
1928-
setType(detail::CGType::Kernel);
1929-
if (!lambdaAndKernelHaveEqualName<NameT>()) {
1930-
extractArgsAndReqs();
1931-
MKernelName = getKernelName();
1932-
} else
1929+
setDeviceKernelInfo(std::move(Kernel));
1930+
if (lambdaAndKernelHaveEqualName<NameT>()) {
19331931
StoreLambda<NameT, KernelType, /*Dims*/ 1, void>(std::move(KernelFunc));
1932+
} else {
1933+
extractArgsAndReqs();
1934+
}
19341935
#else
19351936
detail::CheckDeviceCopyable<KernelType>();
19361937
#endif

0 commit comments

Comments
 (0)