@@ -201,14 +201,20 @@ class DPNPC_id final
201
201
using reference = value_type&;
202
202
using size_type = shape_elem_type;
203
203
204
- DPNPC_id (pointer __ptr, const size_type* __shape, const size_type __shape_size)
204
+ DPNPC_id (DPCTLSyclQueueRef q_ref, pointer __ptr, const size_type* __shape, const size_type __shape_size)
205
205
{
206
+ queue_ref = q_ref;
206
207
std::vector<size_type> shape (__shape, __shape + __shape_size);
207
208
init_container (__ptr, shape);
208
209
}
209
210
210
- DPNPC_id (pointer __ptr, const size_type* __shape, const size_type* __strides, const size_type __ndim)
211
+ DPNPC_id (DPCTLSyclQueueRef q_ref,
212
+ pointer __ptr,
213
+ const size_type* __shape,
214
+ const size_type* __strides,
215
+ const size_type __ndim)
211
216
{
217
+ queue_ref = q_ref;
212
218
std::vector<size_type> shape (__shape, __shape + __ndim);
213
219
std::vector<size_type> strides (__strides, __strides + __ndim);
214
220
init_container (__ptr, shape, strides);
@@ -223,12 +229,14 @@ class DPNPC_id final
223
229
*
224
230
* @note this function is designed for non-SYCL environment execution
225
231
*
232
+ * @param [in] q_ref Reference to SYCL queue.
226
233
* @param [in] __ptr Pointer to input data. Used to get values only.
227
234
* @param [in] __shape Shape of data provided by @ref __ptr.
228
235
* Empty container means scalar value pointed by @ref __ptr.
229
236
*/
230
- DPNPC_id (pointer __ptr, const std::vector<size_type>& __shape)
237
+ DPNPC_id (DPCTLSyclQueueRef q_ref, pointer __ptr, const std::vector<size_type>& __shape)
231
238
{
239
+ queue_ref = q_ref;
232
240
init_container (__ptr, __shape);
233
241
}
234
242
@@ -296,7 +304,7 @@ class DPNPC_id final
296
304
297
305
output_shape_size = __shape.size ();
298
306
const size_type output_shape_size_in_bytes = output_shape_size * sizeof (size_type);
299
- output_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (output_shape_size_in_bytes));
307
+ output_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref, output_shape_size_in_bytes));
300
308
301
309
for (int irit = input_shape_size - 1 , orit = output_shape_size - 1 ; orit >= 0 ; --irit, --orit)
302
310
{
@@ -311,13 +319,15 @@ class DPNPC_id final
311
319
312
320
broadcast_axes_size = valid_axes.size ();
313
321
const size_type broadcast_axes_size_in_bytes = broadcast_axes_size * sizeof (size_type);
314
- broadcast_axes = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (broadcast_axes_size_in_bytes));
322
+ broadcast_axes = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
323
+ broadcast_axes_size_in_bytes));
315
324
std::copy (valid_axes.begin (), valid_axes.end (), broadcast_axes);
316
325
317
326
output_size = std::accumulate (
318
327
output_shape, output_shape + output_shape_size, size_type (1 ), std::multiplies<size_type>());
319
328
320
- output_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (output_shape_size_in_bytes));
329
+ output_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
330
+ output_shape_size_in_bytes));
321
331
get_shape_offsets_inkernel<size_type>(output_shape, output_shape_size, output_shape_strides);
322
332
323
333
iteration_size = 1 ;
@@ -392,7 +402,7 @@ class DPNPC_id final
392
402
const size_type iteration_shape_size_in_bytes = iteration_shape_size * sizeof (size_type);
393
403
std::vector<size_type> iteration_shape;
394
404
395
- output_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (output_shape_size_in_bytes));
405
+ output_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref, output_shape_size_in_bytes));
396
406
size_type* output_shape_it = output_shape;
397
407
for (size_type i = 0 ; i < input_shape_size; ++i)
398
408
{
@@ -406,7 +416,8 @@ class DPNPC_id final
406
416
output_size = std::accumulate (
407
417
output_shape, output_shape + output_shape_size, size_type (1 ), std::multiplies<size_type>());
408
418
409
- output_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (output_shape_size_in_bytes));
419
+ output_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
420
+ output_shape_size_in_bytes));
410
421
get_shape_offsets_inkernel<size_type>(output_shape, output_shape_size, output_shape_strides);
411
422
412
423
iteration_size = 1 ;
@@ -418,11 +429,13 @@ class DPNPC_id final
418
429
iteration_size *= axis_dim;
419
430
}
420
431
421
- iteration_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (iteration_shape_size_in_bytes));
432
+ iteration_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
433
+ iteration_shape_size_in_bytes));
422
434
get_shape_offsets_inkernel<size_type>(
423
435
iteration_shape.data (), iteration_shape.size (), iteration_shape_strides);
424
436
425
- axes_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (iteration_shape_size_in_bytes));
437
+ axes_shape_strides = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
438
+ iteration_shape_size_in_bytes));
426
439
for (size_t i = 0 ; i < iteration_shape_size; ++i)
427
440
{
428
441
axes_shape_strides[i] = input_shape_strides[axes[i]];
@@ -490,11 +503,12 @@ class DPNPC_id final
490
503
}
491
504
492
505
input_shape_size = __shape.size ();
493
- input_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (input_shape_size * sizeof (size_type)));
506
+ input_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
507
+ input_shape_size * sizeof (size_type)));
494
508
std::copy (__shape.begin (), __shape.end (), input_shape);
495
509
496
510
input_shape_strides =
497
- reinterpret_cast <size_type*>(dpnp_memory_alloc_c (input_shape_size * sizeof (size_type)));
511
+ reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref, input_shape_size * sizeof (size_type)));
498
512
get_shape_offsets_inkernel<size_type>(input_shape, input_shape_size, input_shape_strides);
499
513
}
500
514
iteration_size = input_size;
@@ -525,11 +539,12 @@ class DPNPC_id final
525
539
}
526
540
527
541
input_shape_size = __shape.size ();
528
- input_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (input_shape_size * sizeof (size_type)));
542
+ input_shape = reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref,
543
+ input_shape_size * sizeof (size_type)));
529
544
std::copy (__shape.begin (), __shape.end (), input_shape);
530
545
531
546
input_shape_strides =
532
- reinterpret_cast <size_type*>(dpnp_memory_alloc_c (input_shape_size * sizeof (size_type)));
547
+ reinterpret_cast <size_type*>(dpnp_memory_alloc_c (queue_ref, input_shape_size * sizeof (size_type)));
533
548
std::copy (__strides.begin (), __strides.end (), input_shape_strides);
534
549
}
535
550
iteration_size = input_size;
@@ -583,23 +598,23 @@ class DPNPC_id final
583
598
void free_axes_memory ()
584
599
{
585
600
axes.clear ();
586
- dpnp_memory_free_c (axes_shape_strides);
601
+ dpnp_memory_free_c (queue_ref, axes_shape_strides);
587
602
axes_shape_strides = nullptr ;
588
603
}
589
604
590
605
void free_broadcast_axes_memory ()
591
606
{
592
607
broadcast_axes_size = size_type{};
593
- dpnp_memory_free_c (broadcast_axes);
608
+ dpnp_memory_free_c (queue_ref, broadcast_axes);
594
609
broadcast_axes = nullptr ;
595
610
}
596
611
597
612
void free_input_memory ()
598
613
{
599
614
input_size = size_type{};
600
615
input_shape_size = size_type{};
601
- dpnp_memory_free_c (input_shape);
602
- dpnp_memory_free_c (input_shape_strides);
616
+ dpnp_memory_free_c (queue_ref, input_shape);
617
+ dpnp_memory_free_c (queue_ref, input_shape_strides);
603
618
input_shape = nullptr ;
604
619
input_shape_strides = nullptr ;
605
620
}
@@ -608,16 +623,16 @@ class DPNPC_id final
608
623
{
609
624
iteration_size = size_type{};
610
625
iteration_shape_size = size_type{};
611
- dpnp_memory_free_c (iteration_shape_strides);
626
+ dpnp_memory_free_c (queue_ref, iteration_shape_strides);
612
627
iteration_shape_strides = nullptr ;
613
628
}
614
629
615
630
void free_output_memory ()
616
631
{
617
632
output_size = size_type{};
618
633
output_shape_size = size_type{};
619
- dpnp_memory_free_c (output_shape);
620
- dpnp_memory_free_c (output_shape_strides);
634
+ dpnp_memory_free_c (queue_ref, output_shape);
635
+ dpnp_memory_free_c (queue_ref, output_shape_strides);
621
636
output_shape = nullptr ;
622
637
output_shape_strides = nullptr ;
623
638
}
@@ -631,6 +646,8 @@ class DPNPC_id final
631
646
free_output_memory ();
632
647
}
633
648
649
+ DPCTLSyclQueueRef queue_ref = nullptr ; /* *< reference to SYCL queue */
650
+
634
651
pointer data = nullptr ; /* *< input array begin pointer */
635
652
size_type input_size = size_type{}; /* *< input array size */
636
653
size_type* input_shape = nullptr ; /* *< input array shape */
0 commit comments