@@ -201,14 +201,20 @@ class DPNPC_id final
201201 using reference = value_type&;
202202 using size_type = shape_elem_type;
203203
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)
205205 {
206+ queue_ref = q_ref;
206207 std::vector<size_type> shape (__shape, __shape + __shape_size);
207208 init_container (__ptr, shape);
208209 }
209210
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)
211216 {
217+ queue_ref = q_ref;
212218 std::vector<size_type> shape (__shape, __shape + __ndim);
213219 std::vector<size_type> strides (__strides, __strides + __ndim);
214220 init_container (__ptr, shape, strides);
@@ -223,12 +229,14 @@ class DPNPC_id final
223229 *
224230 * @note this function is designed for non-SYCL environment execution
225231 *
232+ * @param [in] q_ref Reference to SYCL queue.
226233 * @param [in] __ptr Pointer to input data. Used to get values only.
227234 * @param [in] __shape Shape of data provided by @ref __ptr.
228235 * Empty container means scalar value pointed by @ref __ptr.
229236 */
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)
231238 {
239+ queue_ref = q_ref;
232240 init_container (__ptr, __shape);
233241 }
234242
@@ -296,7 +304,7 @@ class DPNPC_id final
296304
297305 output_shape_size = __shape.size ();
298306 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));
300308
301309 for (int irit = input_shape_size - 1 , orit = output_shape_size - 1 ; orit >= 0 ; --irit, --orit)
302310 {
@@ -311,13 +319,15 @@ class DPNPC_id final
311319
312320 broadcast_axes_size = valid_axes.size ();
313321 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));
315324 std::copy (valid_axes.begin (), valid_axes.end (), broadcast_axes);
316325
317326 output_size = std::accumulate (
318327 output_shape, output_shape + output_shape_size, size_type (1 ), std::multiplies<size_type>());
319328
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));
321331 get_shape_offsets_inkernel<size_type>(output_shape, output_shape_size, output_shape_strides);
322332
323333 iteration_size = 1 ;
@@ -392,7 +402,7 @@ class DPNPC_id final
392402 const size_type iteration_shape_size_in_bytes = iteration_shape_size * sizeof (size_type);
393403 std::vector<size_type> iteration_shape;
394404
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));
396406 size_type* output_shape_it = output_shape;
397407 for (size_type i = 0 ; i < input_shape_size; ++i)
398408 {
@@ -406,7 +416,8 @@ class DPNPC_id final
406416 output_size = std::accumulate (
407417 output_shape, output_shape + output_shape_size, size_type (1 ), std::multiplies<size_type>());
408418
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));
410421 get_shape_offsets_inkernel<size_type>(output_shape, output_shape_size, output_shape_strides);
411422
412423 iteration_size = 1 ;
@@ -418,11 +429,13 @@ class DPNPC_id final
418429 iteration_size *= axis_dim;
419430 }
420431
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));
422434 get_shape_offsets_inkernel<size_type>(
423435 iteration_shape.data (), iteration_shape.size (), iteration_shape_strides);
424436
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));
426439 for (size_t i = 0 ; i < iteration_shape_size; ++i)
427440 {
428441 axes_shape_strides[i] = input_shape_strides[axes[i]];
@@ -490,11 +503,12 @@ class DPNPC_id final
490503 }
491504
492505 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)));
494508 std::copy (__shape.begin (), __shape.end (), input_shape);
495509
496510 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)));
498512 get_shape_offsets_inkernel<size_type>(input_shape, input_shape_size, input_shape_strides);
499513 }
500514 iteration_size = input_size;
@@ -525,11 +539,12 @@ class DPNPC_id final
525539 }
526540
527541 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)));
529544 std::copy (__shape.begin (), __shape.end (), input_shape);
530545
531546 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)));
533548 std::copy (__strides.begin (), __strides.end (), input_shape_strides);
534549 }
535550 iteration_size = input_size;
@@ -583,23 +598,23 @@ class DPNPC_id final
583598 void free_axes_memory ()
584599 {
585600 axes.clear ();
586- dpnp_memory_free_c (axes_shape_strides);
601+ dpnp_memory_free_c (queue_ref, axes_shape_strides);
587602 axes_shape_strides = nullptr ;
588603 }
589604
590605 void free_broadcast_axes_memory ()
591606 {
592607 broadcast_axes_size = size_type{};
593- dpnp_memory_free_c (broadcast_axes);
608+ dpnp_memory_free_c (queue_ref, broadcast_axes);
594609 broadcast_axes = nullptr ;
595610 }
596611
597612 void free_input_memory ()
598613 {
599614 input_size = size_type{};
600615 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);
603618 input_shape = nullptr ;
604619 input_shape_strides = nullptr ;
605620 }
@@ -608,16 +623,16 @@ class DPNPC_id final
608623 {
609624 iteration_size = size_type{};
610625 iteration_shape_size = size_type{};
611- dpnp_memory_free_c (iteration_shape_strides);
626+ dpnp_memory_free_c (queue_ref, iteration_shape_strides);
612627 iteration_shape_strides = nullptr ;
613628 }
614629
615630 void free_output_memory ()
616631 {
617632 output_size = size_type{};
618633 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);
621636 output_shape = nullptr ;
622637 output_shape_strides = nullptr ;
623638 }
@@ -631,6 +646,8 @@ class DPNPC_id final
631646 free_output_memory ();
632647 }
633648
649+ DPCTLSyclQueueRef queue_ref = nullptr ; /* *< reference to SYCL queue */
650+
634651 pointer data = nullptr ; /* *< input array begin pointer */
635652 size_type input_size = size_type{}; /* *< input array size */
636653 size_type* input_shape = nullptr ; /* *< input array shape */
0 commit comments