@@ -1285,7 +1285,7 @@ class __SYCL_EXPORT handler {
1285
1285
using TransformedArgType = sycl::nd_item<Dims>;
1286
1286
1287
1287
wrap_kernel<WrapAs::parallel_for, KernelName, TransformedArgType, Dims>(
1288
- KernelFunc, nullptr /* Kernel */ , Props, ExecutionRange);
1288
+ KernelFunc, Props, ExecutionRange);
1289
1289
}
1290
1290
1291
1291
// / Defines and invokes a SYCL kernel function for the specified range.
@@ -1357,8 +1357,7 @@ class __SYCL_EXPORT handler {
1357
1357
sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
1358
1358
wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
1359
1359
Dims,
1360
- /* SetNumWorkGroups=*/ true >(KernelFunc, nullptr /* Kernel*/ ,
1361
- Props, NumWorkGroups);
1360
+ /* SetNumWorkGroups=*/ true >(KernelFunc, Props, NumWorkGroups);
1362
1361
}
1363
1362
1364
1363
// / Hierarchical kernel invocation method of a kernel defined as a lambda
@@ -1385,7 +1384,7 @@ class __SYCL_EXPORT handler {
1385
1384
nd_range<Dims> ExecRange =
1386
1385
nd_range<Dims>(NumWorkGroups * WorkGroupSize, WorkGroupSize);
1387
1386
wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
1388
- Dims>(KernelFunc, nullptr /* Kernel */ , Props, ExecRange);
1387
+ Dims>(KernelFunc, Props, ExecRange);
1389
1388
}
1390
1389
1391
1390
#ifdef SYCL_LANGUAGE_VERSION
@@ -1601,30 +1600,65 @@ class __SYCL_EXPORT handler {
1601
1600
WrapAs WrapAsVal, typename KernelName, typename ElementType = void ,
1602
1601
int Dims = 1 , bool SetNumWorkGroups = false ,
1603
1602
typename PropertiesT = ext::oneapi::experimental::empty_properties_t ,
1604
- typename KernelType, typename MaybeKernelTy, typename ... RangeParams>
1605
- void wrap_kernel (const KernelType &KernelFunc, MaybeKernelTy &&MaybeKernel,
1606
- const PropertiesT &Props,
1603
+ typename KernelType, typename ... RangeParams>
1604
+ void wrap_kernel (const KernelType &KernelFunc, const PropertiesT &Props,
1607
1605
[[maybe_unused]] RangeParams &&...params) {
1608
1606
// TODO: Properties may change the kernel function, so in order to avoid
1609
1607
// conflicts they should be included in the name.
1610
1608
using NameT =
1611
1609
typename detail::get_kernel_name_t <KernelName, KernelType>::name;
1612
1610
(void )Props;
1613
- (void )MaybeKernel;
1614
- static_assert (std::is_same_v<MaybeKernelTy, kernel> ||
1615
- std::is_same_v<MaybeKernelTy, std::nullptr_t >);
1616
1611
KernelWrapper<WrapAsVal, NameT, KernelType, ElementType, PropertiesT>::wrap (
1617
1612
this , KernelFunc);
1618
1613
#ifndef __SYCL_DEVICE_ONLY__
1619
1614
if constexpr (WrapAsVal == WrapAs::single_task) {
1620
1615
throwOnKernelParameterMisuse<KernelName, KernelType>();
1621
1616
}
1622
1617
throwIfActionIsCreated ();
1623
- if constexpr (std::is_same_v<MaybeKernelTy, kernel>) {
1624
- // Ignore any set kernel bundles and use the one associated with the
1625
- // kernel.
1626
- setHandlerKernelBundle (MaybeKernel);
1618
+ verifyUsedKernelBundleInternal (
1619
+ detail::string_view{detail::getKernelName<NameT>()});
1620
+ setType (detail::CGType::Kernel);
1621
+
1622
+ detail::checkValueRange<Dims>(params...);
1623
+ if constexpr (SetNumWorkGroups) {
1624
+ setNDRangeDescriptor (std::move (params)...,
1625
+ /* SetNumWorkGroups=*/ true );
1626
+ } else {
1627
+ setNDRangeDescriptor (std::move (params)...);
1627
1628
}
1629
+
1630
+ StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1631
+ processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
1632
+ #endif
1633
+ }
1634
+
1635
+ #ifndef __INTEL_PREVIEW_BREAKING_CHANGES
1636
+ // Implementation for something that had to be removed long ago but now stuck
1637
+ // until next major release...
1638
+ template <
1639
+ WrapAs WrapAsVal, typename KernelName, typename ElementType = void ,
1640
+ int Dims = 1 , bool SetNumWorkGroups = false ,
1641
+ typename PropertiesT = ext::oneapi::experimental::empty_properties_t ,
1642
+ typename KernelType, typename ... RangeParams>
1643
+ void wrap_kernel_legacy (const KernelType &KernelFunc, kernel &Kernel,
1644
+ const PropertiesT &Props,
1645
+ [[maybe_unused]] RangeParams &&...params) {
1646
+ // TODO: Properties may change the kernel function, so in order to avoid
1647
+ // conflicts they should be included in the name.
1648
+ using NameT =
1649
+ typename detail::get_kernel_name_t <KernelName, KernelType>::name;
1650
+ (void )Props;
1651
+ (void )Kernel;
1652
+ KernelWrapper<WrapAsVal, NameT, KernelType, ElementType, PropertiesT>::wrap (
1653
+ this , KernelFunc);
1654
+ #ifndef __SYCL_DEVICE_ONLY__
1655
+ if constexpr (WrapAsVal == WrapAs::single_task) {
1656
+ throwOnKernelParameterMisuse<KernelName, KernelType>();
1657
+ }
1658
+ throwIfActionIsCreated ();
1659
+ // Ignore any set kernel bundles and use the one associated with the
1660
+ // kernel.
1661
+ setHandlerKernelBundle (Kernel);
1628
1662
verifyUsedKernelBundleInternal (
1629
1663
detail::string_view{detail::getKernelName<NameT>()});
1630
1664
setType (detail::CGType::Kernel);
@@ -1637,21 +1671,17 @@ class __SYCL_EXPORT handler {
1637
1671
setNDRangeDescriptor (std::move (params)...);
1638
1672
}
1639
1673
1640
- if constexpr (std::is_same_v<MaybeKernelTy, std::nullptr_t >) {
1641
- StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1674
+ MKernel = detail::getSyclObjImpl (std::move (Kernel));
1675
+ if (!lambdaAndKernelHaveEqualName<NameT>()) {
1676
+ extractArgsAndReqs ();
1677
+ MKernelName = getKernelName ();
1642
1678
} else {
1643
- MKernel = detail::getSyclObjImpl (std::move (MaybeKernel));
1644
- if (!lambdaAndKernelHaveEqualName<NameT>()) {
1645
- extractArgsAndReqs ();
1646
- MKernelName = getKernelName ();
1647
- } else {
1648
- StoreLambda<NameT, KernelType, Dims, ElementType>(
1649
- std::move (KernelFunc));
1650
- }
1679
+ StoreLambda<NameT, KernelType, Dims, ElementType>(std::move (KernelFunc));
1651
1680
}
1652
1681
processProperties<detail::isKernelESIMD<NameT>(), PropertiesT>(Props);
1653
1682
#endif
1654
1683
}
1684
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
1655
1685
1656
1686
// NOTE: to support kernel_handler argument in kernel lambdas, only
1657
1687
// KernelWrapper<...>::wrap() must be called in this code.
@@ -1873,8 +1903,8 @@ class __SYCL_EXPORT handler {
1873
1903
// / \param KernelFunc is a SYCL kernel function.
1874
1904
template <typename KernelName = detail::auto_name, typename KernelType>
1875
1905
void single_task (const KernelType &KernelFunc) {
1876
- wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, nullptr /* Kernel */ ,
1877
- {} /* Props */ , range<1 >{1 });
1906
+ wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, {} /* Props */ ,
1907
+ range<1 >{1 });
1878
1908
}
1879
1909
1880
1910
template <typename KernelName = detail::auto_name, typename KernelType>
@@ -1941,8 +1971,7 @@ class __SYCL_EXPORT handler {
1941
1971
std::is_integral<LambdaArgType>::value && Dims == 1 , item<Dims>,
1942
1972
typename TransformUserItemType<Dims, LambdaArgType>::type>;
1943
1973
wrap_kernel<WrapAs::parallel_for, KernelName, TransformedArgType, Dims>(
1944
- KernelFunc, nullptr /* Kernel*/ , {} /* Props*/ , NumWorkItems,
1945
- WorkItemOffset);
1974
+ KernelFunc, {} /* Props*/ , NumWorkItems, WorkItemOffset);
1946
1975
}
1947
1976
1948
1977
// / Hierarchical kernel invocation method of a kernel defined as a lambda
@@ -2090,6 +2119,7 @@ class __SYCL_EXPORT handler {
2090
2119
#endif
2091
2120
}
2092
2121
2122
+ #ifndef __INTEL_PREVIEW_BREAKING_CHANGES
2093
2123
// / Defines and invokes a SYCL kernel function for the specified range.
2094
2124
// /
2095
2125
// / \param Kernel is a SYCL kernel that is executed on a SYCL device
@@ -2099,12 +2129,13 @@ class __SYCL_EXPORT handler {
2099
2129
// / is a host device.
2100
2130
template <typename KernelName = detail::auto_name, typename KernelType,
2101
2131
int Dims>
2132
+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
2102
2133
void parallel_for(kernel Kernel, range<Dims> NumWorkItems,
2103
2134
const KernelType &KernelFunc) {
2104
2135
// Ignore any set kernel bundles and use the one associated with the kernel
2105
2136
setHandlerKernelBundle (Kernel);
2106
2137
using LambdaArgType = sycl::detail::lambda_arg_type<KernelType, item<Dims>>;
2107
- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2138
+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2108
2139
KernelFunc, Kernel, {} /* Props*/ , NumWorkItems);
2109
2140
}
2110
2141
@@ -2119,11 +2150,11 @@ class __SYCL_EXPORT handler {
2119
2150
// / is a host device.
2120
2151
template <typename KernelName = detail::auto_name, typename KernelType,
2121
2152
int Dims>
2122
- __SYCL2020_DEPRECATED ( " offsets are deprecated in SYCL 2020 " )
2153
+ __SYCL_DEPRECATED ( " This overload isn't part of SYCL2020 and will be removed. " )
2123
2154
void parallel_for(kernel Kernel, range<Dims> NumWorkItems,
2124
2155
id<Dims> WorkItemOffset, const KernelType &KernelFunc) {
2125
2156
using LambdaArgType = sycl::detail::lambda_arg_type<KernelType, item<Dims>>;
2126
- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2157
+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2127
2158
KernelFunc, Kernel, {} /* Props*/ , NumWorkItems, WorkItemOffset);
2128
2159
}
2129
2160
@@ -2138,11 +2169,12 @@ class __SYCL_EXPORT handler {
2138
2169
// / is a host device.
2139
2170
template <typename KernelName = detail::auto_name, typename KernelType,
2140
2171
int Dims>
2172
+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
2141
2173
void parallel_for(kernel Kernel, nd_range<Dims> NDRange,
2142
2174
const KernelType &KernelFunc) {
2143
2175
using LambdaArgType =
2144
2176
sycl::detail::lambda_arg_type<KernelType, nd_item<Dims>>;
2145
- wrap_kernel <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2177
+ wrap_kernel_legacy <WrapAs::parallel_for, KernelName, LambdaArgType, Dims>(
2146
2178
KernelFunc, Kernel, {} /* Props*/ , NDRange);
2147
2179
}
2148
2180
@@ -2161,14 +2193,15 @@ class __SYCL_EXPORT handler {
2161
2193
// / \param KernelFunc is a lambda representing kernel.
2162
2194
template <typename KernelName = detail::auto_name, typename KernelType,
2163
2195
int Dims>
2196
+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
2164
2197
void parallel_for_work_group(kernel Kernel, range<Dims> NumWorkGroups,
2165
2198
const KernelType &KernelFunc) {
2166
2199
using LambdaArgType =
2167
2200
sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
2168
- wrap_kernel <WrapAs::parallel_for_work_group, KernelName, LambdaArgType ,
2169
- Dims,
2170
- /* SetNumWorkGroups*/ true >(KernelFunc, Kernel, {} /* Props */ ,
2171
- NumWorkGroups);
2201
+ wrap_kernel_legacy <WrapAs::parallel_for_work_group, KernelName,
2202
+ LambdaArgType, Dims,
2203
+ /* SetNumWorkGroups*/ true >(KernelFunc, Kernel,
2204
+ {} /* Props */ , NumWorkGroups);
2172
2205
}
2173
2206
2174
2207
// / Hierarchical kernel invocation method of a kernel.
@@ -2188,16 +2221,19 @@ class __SYCL_EXPORT handler {
2188
2221
// / \param KernelFunc is a lambda representing kernel.
2189
2222
template <typename KernelName = detail::auto_name, typename KernelType,
2190
2223
int Dims>
2224
+ __SYCL_DEPRECATED (" This overload isn't part of SYCL2020 and will be removed." )
2191
2225
void parallel_for_work_group(kernel Kernel, range<Dims> NumWorkGroups,
2192
2226
range<Dims> WorkGroupSize,
2193
2227
const KernelType &KernelFunc) {
2194
2228
using LambdaArgType =
2195
2229
sycl::detail::lambda_arg_type<KernelType, group<Dims>>;
2196
2230
nd_range<Dims> ExecRange =
2197
2231
nd_range<Dims>(NumWorkGroups * WorkGroupSize, WorkGroupSize);
2198
- wrap_kernel<WrapAs::parallel_for_work_group, KernelName, LambdaArgType,
2199
- Dims>(KernelFunc, Kernel, {} /* Props*/ , ExecRange);
2232
+ wrap_kernel_legacy<WrapAs::parallel_for_work_group, KernelName,
2233
+ LambdaArgType, Dims>(KernelFunc, Kernel, {} /* Props*/ ,
2234
+ ExecRange);
2200
2235
}
2236
+ #endif // __INTEL_PREVIEW_BREAKING_CHANGES
2201
2237
2202
2238
template <typename KernelName = detail::auto_name, typename KernelType,
2203
2239
typename PropertiesT>
@@ -2208,8 +2244,8 @@ class __SYCL_EXPORT handler {
2208
2244
std::enable_if_t <ext::oneapi::experimental::is_property_list<
2209
2245
PropertiesT>::value> single_task (PropertiesT Props,
2210
2246
const KernelType &KernelFunc) {
2211
- wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, nullptr /* Kernel */ ,
2212
- Props, range<1 >{1 });
2247
+ wrap_kernel<WrapAs::single_task, KernelName>(KernelFunc, Props ,
2248
+ range<1 >{1 });
2213
2249
}
2214
2250
2215
2251
template <typename KernelName = detail::auto_name, typename KernelType,
0 commit comments