Skip to content

Commit 039f031

Browse files
EDIFF1D fix ndim of input array (#1109)
* EDIFF1D fix ndim of input array * Move ediff1d from element-wise functions * Move ediff1d from element-wise functions part 2 Co-authored-by: Alexander-Makaryev <alexander.makaryev@gmail.com>
1 parent ea65198 commit 039f031

File tree

4 files changed

+89
-6
lines changed

4 files changed

+89
-6
lines changed

dpnp/backend/include/dpnp_gen_1arg_2type_tbl.hpp

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,6 @@ MACRO_1ARG_2TYPES_OP(dpnp_cosh_c,
105105
sycl::cosh(input_elem),
106106
oneapi::mkl::vm::cosh(DPNP_QUEUE, input1_size, input1_data, result))
107107
MACRO_1ARG_2TYPES_OP(dpnp_degrees_c, sycl::degrees(input_elem), DPNP_QUEUE.submit(kernel_func))
108-
MACRO_1ARG_2TYPES_OP(dpnp_ediff1d_c, input1_data[output_id + 1] - input_elem, DPNP_QUEUE.submit(kernel_func))
109108
MACRO_1ARG_2TYPES_OP(dpnp_exp2_c,
110109
sycl::exp2(input_elem),
111110
oneapi::mkl::vm::exp2(DPNP_QUEUE, input1_size, input1_data, result))

dpnp/backend/include/dpnp_iface.hpp

Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -368,6 +368,35 @@ INP_DLLEXPORT void dpnp_cumprod_c(void* array1_in, void* result1, size_t size);
368368
template <typename _DataType_input, typename _DataType_output>
369369
INP_DLLEXPORT void dpnp_cumsum_c(void* array1_in, void* result1, size_t size);
370370

371+
/**
372+
* @ingroup BACKEND_API
373+
* @brief The differences between consecutive elements of an array.
374+
*
375+
* @param [out] result_out Output array.
376+
* @param [in] result_size Size of output array.
377+
* @param [in] result_ndim Number of output array dimensions.
378+
* @param [in] result_shape Shape of output array.
379+
* @param [in] result_strides Strides of output array.
380+
* @param [in] input1_in First input array.
381+
* @param [in] input1_size Size of first input array.
382+
* @param [in] input1_ndim Number of first input array dimensions.
383+
* @param [in] input1_shape Shape of first input array.
384+
* @param [in] input1_strides Strides of first input array.
385+
* @param [in] where Mask array.
386+
*/
387+
template <typename _DataType_input, typename _DataType_output>
388+
INP_DLLEXPORT void dpnp_ediff1d_c(void* result_out,
389+
const size_t result_size,
390+
const size_t result_ndim,
391+
const shape_elem_type* result_shape,
392+
const shape_elem_type* result_strides,
393+
const void* input1_in,
394+
const size_t input1_size,
395+
const size_t input1_ndim,
396+
const shape_elem_type* input1_shape,
397+
const shape_elem_type* input1_strides,
398+
const size_t* where);
399+
371400
/**
372401
* @ingroup BACKEND_API
373402
* @brief Compute summary of input array elements.

dpnp/backend/kernels/dpnp_krnl_elemwise.cpp

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -226,11 +226,6 @@ static void func_map_init_elemwise_1arg_2type(func_map_t& fmap)
226226
fmap[DPNPFuncName::DPNP_FN_DEGREES][eft_FLT][eft_FLT] = {eft_FLT, (void*)dpnp_degrees_c<float, float>};
227227
fmap[DPNPFuncName::DPNP_FN_DEGREES][eft_DBL][eft_DBL] = {eft_DBL, (void*)dpnp_degrees_c<double, double>};
228228

229-
fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_INT][eft_INT] = {eft_LNG, (void*)dpnp_ediff1d_c<int32_t, int64_t>};
230-
fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_LNG][eft_LNG] = {eft_LNG, (void*)dpnp_ediff1d_c<int64_t, int64_t>};
231-
fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_FLT][eft_FLT] = {eft_FLT, (void*)dpnp_ediff1d_c<float, float>};
232-
fmap[DPNPFuncName::DPNP_FN_EDIFF1D][eft_DBL][eft_DBL] = {eft_DBL, (void*)dpnp_ediff1d_c<double, double>};
233-
234229
fmap[DPNPFuncName::DPNP_FN_EXP2][eft_INT][eft_INT] = {eft_DBL, (void*)dpnp_exp2_c<int32_t, double>};
235230
fmap[DPNPFuncName::DPNP_FN_EXP2][eft_LNG][eft_LNG] = {eft_DBL, (void*)dpnp_exp2_c<int64_t, double>};
236231
fmap[DPNPFuncName::DPNP_FN_EXP2][eft_FLT][eft_FLT] = {eft_FLT, (void*)dpnp_exp2_c<float, float>};

dpnp/backend/kernels/dpnp_krnl_mathematical.cpp

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -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+
223278
template <typename _KernelNameSpecialization1, typename _KernelNameSpecialization2, typename _KernelNameSpecialization3>
224279
class 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

Comments
 (0)