30
30
#include < dpnp_iface.hpp>
31
31
#include " dpnp_fptr.hpp"
32
32
#include " dpnp_utils.hpp"
33
+ #include " dpnpc_memory_adapter.hpp"
33
34
#include " queue_sycl.hpp"
34
35
35
36
namespace mkl_blas = oneapi::mkl::blas;
@@ -42,8 +43,8 @@ template <typename _DataType, typename _ResultType>
42
43
void dpnp_astype_c (const void * array1_in, void * result1, const size_t size)
43
44
{
44
45
cl::sycl::event event;
45
-
46
- const _DataType* array_in = reinterpret_cast < const _DataType*>(array1_in );
46
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, size);
47
+ const _DataType* array_in = input1_ptr. get_ptr ( );
47
48
_ResultType* result = reinterpret_cast <_ResultType*>(result1);
48
49
49
50
if ((array_in == nullptr ) || (result == nullptr ))
@@ -88,14 +89,16 @@ void dpnp_dot_c(void* result_out,
88
89
{
89
90
(void )input1_shape;
90
91
(void )input1_shape_ndim;
91
- (void )input2_size;
92
92
(void )input2_shape;
93
93
(void )input2_shape_ndim;
94
94
(void )where;
95
95
96
96
cl::sycl::event event;
97
- _DataType_input1* input1 = reinterpret_cast <_DataType_input1*>(const_cast <void *>(input1_in));
98
- _DataType_input2* input2 = reinterpret_cast <_DataType_input2*>(const_cast <void *>(input2_in));
97
+ DPNPC_ptr_adapter<_DataType_input1> input1_ptr (input1_in, input1_size);
98
+ DPNPC_ptr_adapter<_DataType_input2> input2_ptr (input2_in, input2_size);
99
+
100
+ _DataType_input1* input1 = input1_ptr.get_ptr ();
101
+ _DataType_input2* input2 = input2_ptr.get_ptr ();
99
102
_DataType_output* result = reinterpret_cast <_DataType_output*>(result_out);
100
103
101
104
if (!input1_size)
@@ -146,7 +149,7 @@ void dpnp_dot_c(void* result_out,
146
149
std::reduce (policy, local_mem, local_mem + input1_size, _DataType_output (0 ), std::plus<_DataType_output>());
147
150
policy.queue ().wait ();
148
151
149
- result[0 ] = accumulator;
152
+ result[0 ] = accumulator; // TODO use memcpy_c
150
153
151
154
free (local_mem, DPNP_QUEUE);
152
155
}
@@ -166,8 +169,8 @@ void dpnp_eig_c(const void* array_in, void* result1, void* result2, size_t size)
166
169
}
167
170
168
171
cl::sycl::event event;
169
-
170
- const _DataType* array = reinterpret_cast < const _DataType*>(array_in );
172
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array_in, size);
173
+ const _DataType* array = input1_ptr. get_ptr ( );
171
174
_ResultType* result_val = reinterpret_cast <_ResultType*>(result1);
172
175
_ResultType* result_vec = reinterpret_cast <_ResultType*>(result2);
173
176
@@ -177,7 +180,7 @@ void dpnp_eig_c(const void* array_in, void* result1, void* result2, size_t size)
177
180
// type conversion. Also, math library requires copy memory because override
178
181
for (size_t it = 0 ; it < (size * size); ++it)
179
182
{
180
- result_vec_kern[it] = array[it];
183
+ result_vec_kern[it] = array[it]; // TODO use memcpy_c or input1_ptr(array_in, size, true)
181
184
}
182
185
183
186
const std::int64_t lda = std::max<size_t >(1UL , size);
@@ -202,7 +205,7 @@ void dpnp_eig_c(const void* array_in, void* result1, void* result2, size_t size)
202
205
203
206
for (size_t it1 = 0 ; it1 < size; ++it1)
204
207
{
205
- result_val[it1] = result_val_kern[it1];
208
+ result_val[it1] = result_val_kern[it1]; // TODO use memcpy_c or dpnpc_transpose_c
206
209
for (size_t it2 = 0 ; it2 < size; ++it2)
207
210
{
208
211
// copy + transpose
@@ -228,8 +231,8 @@ void dpnp_eigvals_c(const void* array_in, void* result1, size_t size)
228
231
}
229
232
230
233
cl::sycl::event event;
231
-
232
- const _DataType* array = reinterpret_cast < const _DataType*>(array_in );
234
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array_in, size);
235
+ const _DataType* array = input1_ptr. get_ptr ( );
233
236
_ResultType* result_val = reinterpret_cast <_ResultType*>(result1);
234
237
235
238
double * result_val_kern = reinterpret_cast <double *>(dpnp_memory_alloc_c (size * sizeof (double )));
@@ -238,7 +241,7 @@ void dpnp_eigvals_c(const void* array_in, void* result1, size_t size)
238
241
// type conversion. Also, math library requires copy memory because override
239
242
for (size_t it = 0 ; it < (size * size); ++it)
240
243
{
241
- result_vec_kern[it] = array[it];
244
+ result_vec_kern[it] = array[it]; // TODO same as previous kernel
242
245
}
243
246
244
247
const std::int64_t lda = std::max<size_t >(1UL , size);
@@ -304,16 +307,18 @@ class dpnp_matmul_c_kernel;
304
307
template <typename _DataType>
305
308
void dpnp_matmul_c (void * array1_in, void * array2_in, void * result1, size_t size_m, size_t size_n, size_t size_k)
306
309
{
307
- cl::sycl::event event;
308
- _DataType* array_1 = reinterpret_cast <_DataType*>(array1_in);
309
- _DataType* array_2 = reinterpret_cast <_DataType*>(array2_in);
310
- _DataType* result = reinterpret_cast <_DataType*>(result1);
311
-
312
310
if (!size_m || !size_n || !size_k)
313
311
{
314
312
return ;
315
313
}
316
314
315
+ cl::sycl::event event;
316
+ DPNPC_ptr_adapter<_DataType> input1_ptr (array1_in, size_m * size_k);
317
+ DPNPC_ptr_adapter<_DataType> input2_ptr (array2_in, size_k * size_n);
318
+ _DataType* array_1 = input1_ptr.get_ptr ();
319
+ _DataType* array_2 = input2_ptr.get_ptr ();
320
+ _DataType* result = reinterpret_cast <_DataType*>(result1);
321
+
317
322
if constexpr (std::is_same<_DataType, double >::value || std::is_same<_DataType, float >::value)
318
323
{
319
324
// using std::max for these ldx variables is required by math library
0 commit comments