@@ -220,6 +220,61 @@ void dpnp_cumsum_c(void* array1_in, void* result1, size_t size)
220220 return ;
221221}
222222
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+
223278template <typename _KernelNameSpecialization1, typename _KernelNameSpecialization2, typename _KernelNameSpecialization3>
224279class dpnp_floor_divide_c_kernel ;
225280
@@ -548,6 +603,11 @@ void func_map_init_mathematical(func_map_t& fmap)
548603 fmap[DPNPFuncName::DPNP_FN_CUMSUM][eft_FLT][eft_FLT] = {eft_FLT, (void *)dpnp_cumsum_c<float , float >};
549604 fmap[DPNPFuncName::DPNP_FN_CUMSUM][eft_DBL][eft_DBL] = {eft_DBL, (void *)dpnp_cumsum_c<double , double >};
550605
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+
551611 fmap[DPNPFuncName::DPNP_FN_FLOOR_DIVIDE][eft_INT][eft_INT] = {
552612 eft_INT, (void *)dpnp_floor_divide_c<int32_t , int32_t , int32_t >};
553613 fmap[DPNPFuncName::DPNP_FN_FLOOR_DIVIDE][eft_INT][eft_LNG] = {
0 commit comments