@@ -277,18 +277,71 @@ def set_3d_ones_item(item: Item, a):
277277 j = item .get_id (1 )
278278 k = item .get_id (2 )
279279
280- # Since we have different sizes for each dimention , wrong order will result
280+ # Since we have different sizes for each dimension , wrong order will result
281281 # that some indexes will be set twice and some won't be set.
282282 index = i + I_SIZE * (j + J_SIZE * k )
283283
284284 a [index ] = 1
285285
286286
287- def test_index_order ():
287+ @dpex_exp .kernel
288+ def set_3d_ones_item_linear (item : Item , a ):
289+ # Since we have different sizes for each dimension, wrong order will result
290+ # that some indexes will be set twice and some won't be set.
291+ index = item .get_linear_id ()
292+
293+ a [index ] = 1
294+
295+
296+ @dpex_exp .kernel
297+ def set_3d_ones_nd_item_linear (nd_item : NdItem , a ):
298+ # Since we have different sizes for each dimension, wrong order will result
299+ # that some indexes will be set twice and some won't be set.
300+ index = nd_item .get_global_linear_id ()
301+
302+ a [index ] = 1
303+
304+
305+ @dpex_exp .kernel
306+ def set_local_3d_ones_nd_item_linear (nd_item : NdItem , a ):
307+ # Since we have different sizes for each dimension, wrong order will result
308+ # that some indexes will be set twice and some won't be set.
309+ index = nd_item .get_local_linear_id ()
310+
311+ a [index ] = 1
312+
313+
314+ @pytest .mark .parametrize ("kernel" , [set_3d_ones_item , set_3d_ones_item_linear ])
315+ def test_item_index_order (kernel ):
316+ a = dpnp .zeros (I_SIZE * J_SIZE * K_SIZE , dtype = dpnp .int32 )
317+
318+ dpex_exp .call_kernel (kernel , dpex .Range (I_SIZE , J_SIZE , K_SIZE ), a )
319+
320+ assert np .array_equal (a .asnumpy (), np .ones (a .size , dtype = np .int32 ))
321+
322+
323+ def test_nd_item_index_order ():
288324 a = dpnp .zeros (I_SIZE * J_SIZE * K_SIZE , dtype = dpnp .int32 )
289325
290326 dpex_exp .call_kernel (
291- set_3d_ones_item , dpex .Range (I_SIZE , J_SIZE , K_SIZE ), a
327+ set_3d_ones_nd_item_linear ,
328+ dpex .NdRange ((I_SIZE , J_SIZE , K_SIZE ), (1 , 1 , K_SIZE )),
329+ a ,
292330 )
293331
294332 assert np .array_equal (a .asnumpy (), np .ones (a .size , dtype = np .int32 ))
333+
334+
335+ def test_nd_item_local_linear_id ():
336+ a = dpnp .zeros (I_SIZE * J_SIZE * K_SIZE , dtype = dpnp .int32 )
337+
338+ dpex_exp .call_kernel (
339+ set_local_3d_ones_nd_item_linear ,
340+ dpex .NdRange ((I_SIZE , J_SIZE , K_SIZE ), (1 , 1 , K_SIZE )),
341+ a ,
342+ )
343+
344+ assert np .array_equal (
345+ a .asnumpy (),
346+ np .array ([1 ] * K_SIZE + [0 ] * (a .size - K_SIZE ), dtype = np .int32 ),
347+ )
0 commit comments