@@ -220,6 +220,61 @@ void dpnp_cumsum_c(void* array1_in, void* result1, size_t size)
220
220
return ;
221
221
}
222
222
223
+ template <typename _KernelNameSpecialization1, typename _KernelNameSpecialization2>
224
+ class dpnp_ediff1d_c_kernel ;
225
+
226
+ template <typename _DataType_input, typename _DataType_output>
227
+ void dpnp_ediff1d_c (void * result_out,
228
+ const size_t result_size,
229
+ const size_t result_ndim,
230
+ const shape_elem_type* result_shape,
231
+ const shape_elem_type* result_strides,
232
+ const void * input1_in,
233
+ const size_t input1_size,
234
+ const size_t input1_ndim,
235
+ const shape_elem_type* input1_shape,
236
+ const shape_elem_type* input1_strides,
237
+ const size_t * where)
238
+ {
239
+ /* avoid warning unused variable*/
240
+ (void )result_ndim;
241
+ (void )result_shape;
242
+ (void )result_strides;
243
+ (void )input1_ndim;
244
+ (void )input1_shape;
245
+ (void )input1_strides;
246
+ (void )where;
247
+
248
+ if (!input1_size)
249
+ {
250
+ return ;
251
+ }
252
+
253
+ DPNPC_ptr_adapter<_DataType_input> input1_ptr (input1_in, input1_size);
254
+ DPNPC_ptr_adapter<_DataType_output> result_ptr (result_out, result_size, false , true );
255
+
256
+ _DataType_input* input1_data = input1_ptr.get_ptr ();
257
+ _DataType_output* result = result_ptr.get_ptr ();
258
+
259
+ cl::sycl::event event;
260
+ cl::sycl::range<1 > gws (result_size);
261
+
262
+ auto kernel_parallel_for_func = [=](cl::sycl::id<1 > global_id) {
263
+ size_t output_id = global_id[0 ]; /* for (size_t i = 0; i < result_size; ++i)*/
264
+ {
265
+ const _DataType_output curr_elem = input1_data[output_id];
266
+ const _DataType_output next_elem = input1_data[output_id + 1 ];
267
+ result[output_id] = next_elem - curr_elem;
268
+ }
269
+ };
270
+ auto kernel_func = [&](cl::sycl::handler& cgh) {
271
+ cgh.parallel_for <class dpnp_ediff1d_c_kernel <_DataType_input, _DataType_output>>(
272
+ gws, kernel_parallel_for_func);
273
+ };
274
+ event = DPNP_QUEUE.submit (kernel_func);
275
+ event.wait ();
276
+ }
277
+
223
278
template <typename _KernelNameSpecialization1, typename _KernelNameSpecialization2, typename _KernelNameSpecialization3>
224
279
class dpnp_floor_divide_c_kernel ;
225
280
@@ -548,6 +603,11 @@ void func_map_init_mathematical(func_map_t& fmap)
548
603
fmap[DPNPFuncName::DPNP_FN_CUMSUM][eft_FLT][eft_FLT] = {eft_FLT, (void *)dpnp_cumsum_c<float , float >};
549
604
fmap[DPNPFuncName::DPNP_FN_CUMSUM][eft_DBL][eft_DBL] = {eft_DBL, (void *)dpnp_cumsum_c<double , double >};
550
605
606
+ fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_INT][eft_INT] = {eft_LNG, (void *)dpnp_ediff1d_c<int32_t , int64_t >};
607
+ fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_LNG][eft_LNG] = {eft_LNG, (void *)dpnp_ediff1d_c<int64_t , int64_t >};
608
+ fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_FLT][eft_FLT] = {eft_FLT, (void *)dpnp_ediff1d_c<float , float >};
609
+ fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_DBL][eft_DBL] = {eft_DBL, (void *)dpnp_ediff1d_c<double , double >};
610
+
551
611
fmap[DPNPFuncName::DPNP_FN_FLOOR_DIVIDE][eft_INT][eft_INT] = {
552
612
eft_INT, (void *)dpnp_floor_divide_c<int32_t , int32_t , int32_t >};
553
613
fmap[DPNPFuncName::DPNP_FN_FLOOR_DIVIDE][eft_INT][eft_LNG] = {
0 commit comments