Skip to content

Commit 25ec52b

Browse files
[SYCL][NFC] Decouple property parsing from KernelWrapper (#19566)
Motivation behind this PR is to club together all data members and functions required for parsing kernel launch properties, so that this code can be reused for the no-handler submission path.
1 parent 05538e0 commit 25ec52b

File tree

2 files changed

+35
-24
lines changed

2 files changed

+35
-24
lines changed

sycl/include/sycl/detail/kernel_launch_helper.hpp

Lines changed: 21 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -195,33 +195,21 @@ struct KernelWrapperHelperFuncs {
195195
// embedding them into the kernel's type).
196196

197197
template <WrapAs WrapAsVal, typename KernelName, typename KernelType,
198-
typename ElementType, typename PropertyProcessor,
198+
typename ElementType,
199199
typename PropertiesT = ext::oneapi::experimental::empty_properties_t,
200200
typename MergedPropertiesT = typename detail::
201201
GetMergedKernelProperties<KernelType, PropertiesT>::type>
202202
struct KernelWrapper;
203203
template <WrapAs WrapAsVal, typename KernelName, typename KernelType,
204-
typename ElementType, typename PropertyProcessor,
205-
typename PropertiesT, typename... MergedProps>
204+
typename ElementType, typename PropertiesT, typename... MergedProps>
206205
struct KernelWrapper<
207-
WrapAsVal, KernelName, KernelType, ElementType, PropertyProcessor,
208-
PropertiesT,
206+
WrapAsVal, KernelName, KernelType, ElementType, PropertiesT,
209207
ext::oneapi::experimental::detail::properties_t<MergedProps...>>
210208
: public KernelWrapperHelperFuncs {
211209

212-
static void wrap([[maybe_unused]] PropertyProcessor h,
213-
[[maybe_unused]] const KernelType &KernelFunc) {
210+
static void wrap([[maybe_unused]] const KernelType &KernelFunc) {
214211
#ifdef __SYCL_DEVICE_ONLY__
215212
detail::CheckDeviceCopyable<KernelType>();
216-
#else
217-
// If there are properties provided by get method then process them.
218-
if constexpr (ext::oneapi::experimental::detail::
219-
HasKernelPropertiesGetMethod<const KernelType &>::value) {
220-
221-
// TODO: decouple property processing from KernelWrapper.
222-
h->template processProperties<detail::isKernelESIMD<KernelName>()>(
223-
KernelFunc.get(ext::oneapi::experimental::properties_tag{}));
224-
}
225213
#endif
226214
// Note: the static_assert below need to be run on both the host and the
227215
// device ends to avoid test issues, so don't put it into the #ifdef
@@ -263,6 +251,23 @@ struct KernelWrapper<
263251
}
264252
}; // KernelWrapper struct
265253

254+
struct KernelLaunchPropertyWrapper {
255+
template <typename KernelName, typename PropertyProcessor,
256+
typename KernelType>
257+
static void parseProperties([[maybe_unused]] PropertyProcessor h,
258+
[[maybe_unused]] const KernelType &KernelFunc) {
259+
#ifndef __SYCL_DEVICE_ONLY__
260+
// If there are properties provided by get method then process them.
261+
if constexpr (ext::oneapi::experimental::detail::
262+
HasKernelPropertiesGetMethod<const KernelType &>::value) {
263+
264+
h->template processProperties<detail::isKernelESIMD<KernelName>()>(
265+
KernelFunc.get(ext::oneapi::experimental::properties_tag{}));
266+
}
267+
#endif
268+
}
269+
}; // KernelLaunchPropertyWrapper struct
270+
266271
} // namespace detail
267272
} // namespace _V1
268273
} // namespace sycl

sycl/include/sycl/handler.hpp

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1294,7 +1294,10 @@ class __SYCL_EXPORT handler {
12941294

12951295
detail::KernelWrapper<detail::WrapAs::parallel_for, KName,
12961296
decltype(Wrapper), TransformedArgType,
1297-
decltype(this), PropertiesT>::wrap(this, Wrapper);
1297+
PropertiesT>::wrap(Wrapper);
1298+
1299+
detail::KernelLaunchPropertyWrapper::parseProperties<KName>(this,
1300+
Wrapper);
12981301
#ifndef __SYCL_DEVICE_ONLY__
12991302
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
13001303
verifyUsedKernelBundleInternal(Name);
@@ -1319,8 +1322,9 @@ class __SYCL_EXPORT handler {
13191322
// If parallel_for range rounding is forced then only range rounded
13201323
// kernel is generated
13211324
detail::KernelWrapper<detail::WrapAs::parallel_for, NameT, KernelType,
1322-
TransformedArgType, decltype(this),
1323-
PropertiesT>::wrap(this, KernelFunc);
1325+
TransformedArgType, PropertiesT>::wrap(KernelFunc);
1326+
detail::KernelLaunchPropertyWrapper::parseProperties<NameT>(this,
1327+
KernelFunc);
13241328
#ifndef __SYCL_DEVICE_ONLY__
13251329
constexpr detail::string_view Name{detail::getKernelName<NameT>()};
13261330

@@ -1400,7 +1404,9 @@ class __SYCL_EXPORT handler {
14001404
typename detail::get_kernel_name_t<KernelName, KernelType>::name;
14011405
(void)Props;
14021406
detail::KernelWrapper<WrapAsVal, NameT, KernelType, ElementType,
1403-
decltype(this), PropertiesT>::wrap(this, KernelFunc);
1407+
PropertiesT>::wrap(KernelFunc);
1408+
detail::KernelLaunchPropertyWrapper::parseProperties<NameT>(this,
1409+
KernelFunc);
14041410
#ifndef __SYCL_DEVICE_ONLY__
14051411
if constexpr (WrapAsVal == detail::WrapAs::single_task) {
14061412
throwOnKernelParameterMisuse<KernelName, KernelType>();
@@ -1441,7 +1447,9 @@ class __SYCL_EXPORT handler {
14411447
(void)Props;
14421448
(void)Kernel;
14431449
detail::KernelWrapper<WrapAsVal, NameT, KernelType, ElementType,
1444-
decltype(this), PropertiesT>::wrap(this, KernelFunc);
1450+
PropertiesT>::wrap(KernelFunc);
1451+
detail::KernelLaunchPropertyWrapper::parseProperties<NameT>(this,
1452+
KernelFunc);
14451453
#ifndef __SYCL_DEVICE_ONLY__
14461454
if constexpr (WrapAsVal == detail::WrapAs::single_task) {
14471455
throwOnKernelParameterMisuse<KernelName, KernelType>();
@@ -3643,9 +3651,7 @@ class __SYCL_EXPORT handler {
36433651
void instantiateKernelOnHost(void *InstantiateKernelOnHostPtr);
36443652

36453653
friend class detail::HandlerAccess;
3646-
template <detail::WrapAs, typename, typename, typename, typename, typename,
3647-
typename>
3648-
friend struct detail::KernelWrapper;
3654+
friend struct detail::KernelLaunchPropertyWrapper;
36493655

36503656
#ifdef __INTEL_PREVIEW_BREAKING_CHANGES
36513657
__SYCL_DLL_LOCAL detail::handler_impl *get_impl() { return impl; }

0 commit comments

Comments
 (0)