27
27
28
28
#include < dpnp_iface.hpp>
29
29
#include " dpnp_fptr.hpp"
30
+ #include " dpnpc_memory_adapter.hpp"
30
31
#include " queue_sycl.hpp"
31
32
32
33
template <typename _DataType, typename _idx_DataType>
@@ -52,8 +53,10 @@ class dpnp_argsort_c_kernel;
52
53
template <typename _DataType, typename _idx_DataType>
53
54
void dpnp_argsort_c (void * array1_in, void * result1, size_t size)
54
55
{
55
- _DataType* array_1 = reinterpret_cast <_DataType*>(array1_in);
56
- _idx_DataType* result = reinterpret_cast <_idx_DataType*>(result1);
56
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, size, true );
57
+ DPNPC_ptr_adapter<_idx_DataType> result1_ptr (result1, size, true , true );
58
+ _DataType* array_1 = input1_ptr.get_ptr ();
59
+ _idx_DataType* result = result1_ptr.get_ptr ();
57
60
58
61
std::iota (result, result + size, 0 );
59
62
@@ -90,11 +93,7 @@ template <typename _DataType>
90
93
void dpnp_partition_c (
91
94
void * array1_in, void * array2_in, void * result1, const size_t kth, const size_t * shape_, const size_t ndim)
92
95
{
93
- _DataType* arr = reinterpret_cast <_DataType*>(array1_in);
94
- _DataType* arr2 = reinterpret_cast <_DataType*>(array2_in);
95
- _DataType* result = reinterpret_cast <_DataType*>(result1);
96
-
97
- if ((arr == nullptr ) || (result == nullptr ))
96
+ if ((array1_in == nullptr ) || (array2_in == nullptr ) || (result1 == nullptr ))
98
97
{
99
98
return ;
100
99
}
@@ -104,19 +103,23 @@ void dpnp_partition_c(
104
103
return ;
105
104
}
106
105
107
- size_t size = 1 ;
108
- for (size_t i = 0 ; i < ndim; ++i)
109
- {
110
- size *= shape_[i];
111
- }
112
-
106
+ const size_t size = std::accumulate (shape_, shape_ + ndim, 1 , std::multiplies<size_t >());
113
107
size_t size_ = size / shape_[ndim - 1 ];
114
108
115
109
if (size_ == 0 )
116
110
{
117
111
return ;
118
112
}
119
113
114
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, size, true );
115
+ DPNPC_ptr_adapter<_DataType> input2_ptr (array2_in, size, true );
116
+ DPNPC_ptr_adapter<_DataType> result1_ptr (result1, size, true , true );
117
+ _DataType* arr = input1_ptr.get_ptr ();
118
+ _DataType* arr2 = input2_ptr.get_ptr ();
119
+ _DataType* result = result1_ptr.get_ptr ();
120
+
121
+
122
+
120
123
auto arr_to_result_event = DPNP_QUEUE.memcpy (result, arr, size * sizeof (_DataType));
121
124
arr_to_result_event.wait ();
122
125
@@ -182,11 +185,7 @@ template <typename _DataType, typename _IndexingType>
182
185
void dpnp_searchsorted_c (
183
186
void * result1, const void * array1_in, const void * v1_in, bool side, const size_t arr_size, const size_t v_size)
184
187
{
185
- const _DataType* arr = reinterpret_cast <const _DataType*>(array1_in);
186
- const _DataType* v = reinterpret_cast <const _DataType*>(v1_in);
187
- _IndexingType* result = reinterpret_cast <_IndexingType*>(result1);
188
-
189
- if ((arr == nullptr ) || (v == nullptr ) || (result == nullptr ))
188
+ if ((array1_in == nullptr ) || (v1_in == nullptr ) || (result1 == nullptr ))
190
189
{
191
190
return ;
192
191
}
@@ -201,6 +200,12 @@ void dpnp_searchsorted_c(
201
200
return ;
202
201
}
203
202
203
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, arr_size);
204
+ DPNPC_ptr_adapter<_DataType> input2_ptr (v1_in, v_size);
205
+ const _DataType* arr = input1_ptr.get_ptr ();
206
+ const _DataType* v = input2_ptr.get_ptr ();
207
+ _IndexingType* result = reinterpret_cast <_IndexingType*>(result1);
208
+
204
209
cl::sycl::range<2 > gws (v_size, arr_size);
205
210
auto kernel_parallel_for_func = [=](cl::sycl::id<2 > global_id) {
206
211
size_t i = global_id[0 ];
@@ -281,8 +286,10 @@ class dpnp_sort_c_kernel;
281
286
template <typename _DataType>
282
287
void dpnp_sort_c (void * array1_in, void * result1, size_t size)
283
288
{
284
- _DataType* array_1 = reinterpret_cast <_DataType*>(array1_in);
285
- _DataType* result = reinterpret_cast <_DataType*>(result1);
289
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, size, true );
290
+ DPNPC_ptr_adapter<_DataType> result1_ptr (result1, size, true , true );
291
+ _DataType* array_1 = input1_ptr.get_ptr ();
292
+ _DataType* result = result1_ptr.get_ptr ();
286
293
287
294
std::copy (array_1, array_1 + size, result);
288
295
0 commit comments