@@ -185,19 +185,12 @@ class HostKernel : public HostKernelBase {
185185 template <class ArgT = KernelArgType>
186186 typename std::enable_if<std::is_same<ArgT, sycl::id<Dims>>::value>::type
187187 runOnHost (const NDRDescT &NDRDesc) {
188- size_t XYZ[3 ] = {0 };
189- sycl::id<Dims> ID;
190- for (; XYZ[2 ] < NDRDesc.GlobalSize [2 ]; ++XYZ[2 ]) {
191- XYZ[1 ] = 0 ;
192- for (; XYZ[1 ] < NDRDesc.GlobalSize [1 ]; ++XYZ[1 ]) {
193- XYZ[0 ] = 0 ;
194- for (; XYZ[0 ] < NDRDesc.GlobalSize [0 ]; ++XYZ[0 ]) {
195- for (int I = 0 ; I < Dims; ++I)
196- ID[I] = XYZ[I];
197- MKernel (ID);
198- }
199- }
200- }
188+ sycl::range<Dims> Range (InitializedVal<Dims, range>::template get<0 >());
189+ for (int I = 0 ; I < Dims; ++I)
190+ Range[I] = NDRDesc.GlobalSize [I];
191+
192+ detail::NDLoop<Dims>::iterate(
193+ Range, [&](const sycl::id<Dims> &ID) { MKernel (ID); });
201194 }
202195
203196 template <class ArgT = KernelArgType>
@@ -210,20 +203,11 @@ class HostKernel : public HostKernelBase {
210203 for (int I = 0 ; I < Dims; ++I)
211204 Range[I] = NDRDesc.GlobalSize [I];
212205
213- for (; XYZ[2 ] < NDRDesc.GlobalSize [2 ]; ++XYZ[2 ]) {
214- XYZ[1 ] = 0 ;
215- for (; XYZ[1 ] < NDRDesc.GlobalSize [1 ]; ++XYZ[1 ]) {
216- XYZ[0 ] = 0 ;
217- for (; XYZ[0 ] < NDRDesc.GlobalSize [0 ]; ++XYZ[0 ]) {
218- for (int I = 0 ; I < Dims; ++I)
219- ID[I] = XYZ[I];
220-
221- sycl::item<Dims, /* Offset=*/ false > Item =
222- IDBuilder::createItem<Dims, false >(Range, ID);
223- MKernel (Item);
224- }
225- }
226- }
206+ detail::NDLoop<Dims>::iterate(Range, [&](const sycl::id<Dims> ID) {
207+ sycl::item<Dims, /* Offset=*/ false > Item =
208+ IDBuilder::createItem<Dims, false >(Range, ID);
209+ MKernel (Item);
210+ });
227211 }
228212
229213 template <class ArgT = KernelArgType>
@@ -236,22 +220,13 @@ class HostKernel : public HostKernelBase {
236220 Range[I] = NDRDesc.GlobalSize [I];
237221 Offset[I] = NDRDesc.GlobalOffset [I];
238222 }
239- size_t XYZ[3 ] = {0 };
240- sycl::id<Dims> ID;
241- for (; XYZ[2 ] < NDRDesc.GlobalSize [2 ]; ++XYZ[2 ]) {
242- XYZ[1 ] = 0 ;
243- for (; XYZ[1 ] < NDRDesc.GlobalSize [1 ]; ++XYZ[1 ]) {
244- XYZ[0 ] = 0 ;
245- for (; XYZ[0 ] < NDRDesc.GlobalSize [0 ]; ++XYZ[0 ]) {
246- for (int I = 0 ; I < Dims; ++I)
247- ID[I] = XYZ[I] + Offset[I];
248-
249- sycl::item<Dims, /* Offset=*/ true > Item =
250- IDBuilder::createItem<Dims, true >(Range, ID, Offset);
251- MKernel (Item);
252- }
253- }
254- }
223+
224+ detail::NDLoop<Dims>::iterate(Range, [&](const sycl::id<Dims> &ID) {
225+ sycl::id<Dims> OffsetID = ID + Offset;
226+ sycl::item<Dims, /* Offset=*/ true > Item =
227+ IDBuilder::createItem<Dims, true >(Range, OffsetID, Offset);
228+ MKernel (Item);
229+ });
255230 }
256231
257232 template <class ArgT = KernelArgType>
0 commit comments