Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
90 changes: 63 additions & 27 deletions dpnp/backend.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -32,29 +32,54 @@ from dpnp.dparray cimport dparray, dparray_shape_type
cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncName": # need this namespace for Enum import
cdef enum DPNPFuncName "DPNPFuncName":
DPNP_FN_ADD
DPNP_FN_ARCCOS
DPNP_FN_ARCCOSH
DPNP_FN_ARCSIN
DPNP_FN_ARCSINH
DPNP_FN_ARCTAN
DPNP_FN_ARCTAN2
DPNP_FN_ARCTANH
DPNP_FN_ARGMAX
DPNP_FN_ARGMIN
DPNP_FN_ARGSORT
DPNP_FN_CBRT
DPNP_FN_CEIL
DPNP_FN_COS
DPNP_FN_COSH
DPNP_FN_COV
DPNP_FN_DEGREES
DPNP_FN_DIVIDE
DPNP_FN_DOT
DPNP_FN_EIG
DPNP_FN_EXP
DPNP_FN_EXP2
DPNP_FN_EXPM1
DPNP_FN_FABS
DPNP_FN_FLOOR
DPNP_FN_FMOD
DPNP_FN_HYPOT
DPNP_FN_LOG
DPNP_FN_LOG10
DPNP_FN_LOG1P
DPNP_FN_LOG2
DPNP_FN_MATMUL
DPNP_FN_MAXIMUM
DPNP_FN_MINIMUM
DPNP_FN_MULTIPLY
DPNP_FN_POWER
DPNP_FN_PROD
DPNP_FN_RADIANS
DPNP_FN_RAND
DPNP_FN_RECIP
DPNP_FN_SIGN
DPNP_FN_SIN
DPNP_FN_SINH
DPNP_FN_SQRT
DPNP_FN_SQUARE
DPNP_FN_SUBTRACT
DPNP_FN_SUM
DPNP_FN_TAN
DPNP_FN_TANH
DPNP_FN_TRUNC

cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncType": # need this namespace for Enum import
Expand Down Expand Up @@ -93,33 +118,6 @@ cdef extern from "backend/backend_iface.hpp":
void mkl_blas_dot_c[_DataType](void * array1, void * array2, void * result1, size_t size)
void mkl_lapack_syevd_c[_DataType](void * array1, void * result1, size_t size)

# Trigonometric part
void custom_elemwise_acos_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_acosh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_asin_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_asinh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_atan_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_atanh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_cbrt_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_cos_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_cosh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_degrees_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_exp2_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_exp_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_expm1_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_log10_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_log1p_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_log2_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_log_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_radians_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_recip_c[_DataType](void * array1, void * result1, size_t size)
void custom_elemwise_sin_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_sinh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_sqrt_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_square_c[_DataType](void * array1, void * result1, size_t size)
void custom_elemwise_tan_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
void custom_elemwise_tanh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)

# array manipulation routines
void custom_elemwise_transpose_c[_DataType](void * array1_in, dparray_shape_type & input_shape, dparray_shape_type & result_shape, dparray_shape_type & permute_axes, void * result1, size_t size)

Expand All @@ -139,6 +137,15 @@ cdef extern from "backend/backend_iface.hpp":
void custom_argmax_c[_DataType, _idx_DataType](void * array, void * result, size_t size)
void custom_argmin_c[_DataType, _idx_DataType](void * array, void * result, size_t size)


# C function pointer to the C library template functions
ctypedef void(*fptr_1in_1out_t)(void *, void * , size_t)
ctypedef void(*fptr_2in_1out_t)(void *, void*, void*, size_t)

cdef dparray call_fptr_1in_1out(DPNPFuncName fptr_name, dparray x1, dparray_shape_type result_shape)
cdef dparray call_fptr_2in_1out(DPNPFuncName fptr_name, dparray x1, dparray x2, dparray_shape_type result_shape)


cpdef dparray dpnp_remainder(dparray array1, int scalar)
cpdef dparray dpnp_astype(dparray array1, dtype_target)

Expand Down Expand Up @@ -223,3 +230,32 @@ Searching functions
"""
cpdef dparray dpnp_argmax(dparray array1)
cpdef dparray dpnp_argmin(dparray array1)

"""
Trigonometric functions
"""
cpdef dparray dpnp_arccos(dparray array1)
cpdef dparray dpnp_arccosh(dparray array1)
cpdef dparray dpnp_arcsin(dparray array1)
cpdef dparray dpnp_arcsinh(dparray array1)
cpdef dparray dpnp_arctan(dparray array1)
cpdef dparray dpnp_arctanh(dparray array1)
cpdef dparray dpnp_cbrt(dparray array1)
cpdef dparray dpnp_cos(dparray array1)
cpdef dparray dpnp_cosh(dparray array1)
cpdef dparray dpnp_degrees(dparray array1)
cpdef dparray dpnp_exp(dparray array1)
cpdef dparray dpnp_exp2(dparray array1)
cpdef dparray dpnp_expm1(dparray array1)
cpdef dparray dpnp_log(dparray array1)
cpdef dparray dpnp_log10(dparray array1)
cpdef dparray dpnp_log1p(dparray array1)
cpdef dparray dpnp_log2(dparray array1)
cpdef dparray dpnp_radians(dparray array1)
cpdef dparray dpnp_recip(dparray array1)
cpdef dparray dpnp_sin(dparray array1)
cpdef dparray dpnp_sinh(dparray array1)
cpdef dparray dpnp_sqrt(dparray array1)
cpdef dparray dpnp_square(dparray array1)
cpdef dparray dpnp_tan(dparray array1)
cpdef dparray dpnp_tanh(dparray array1)
39 changes: 39 additions & 0 deletions dpnp/backend.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -254,3 +254,42 @@ cpdef dpnp_DPNPFuncType_to_dtype(size_t type):
return numpy.int32
else:
checker_throw_type_error("dpnp_DPNPFuncType_to_dtype", type)


cdef dparray call_fptr_1in_1out(DPNPFuncName fptr_name, dparray x1, dparray_shape_type result_shape):

""" Convert string type names (dparray.dtype) to C enum DPNPFuncType """
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(x1.dtype)

""" get the FPTR data structure """
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(fptr_name, param1_type, param1_type)

result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
""" Create result array with type given by FPTR data """
cdef dparray result = dparray(result_shape, dtype=result_type)

cdef fptr_1in_1out_t func = <fptr_1in_1out_t > kernel_data.ptr
""" Call FPTR function """
func(x1.get_data(), result.get_data(), x1.size)

return result


cdef dparray call_fptr_2in_1out(DPNPFuncName fptr_name, dparray x1, dparray x2, dparray_shape_type result_shape):

""" Convert string type names (dparray.dtype) to C enum DPNPFuncType """
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(x1.dtype)
cdef DPNPFuncType param2_type = dpnp_dtype_to_DPNPFuncType(x2.dtype)

""" get the FPTR data structure """
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(fptr_name, param1_type, param2_type)

result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
""" Create result array with type given by FPTR data """
cdef dparray result = dparray(result_shape, dtype=result_type)

cdef fptr_2in_1out_t func = <fptr_2in_1out_t > kernel_data.ptr
""" Call FPTR function """
func(x1.get_data(), x2.get_data(), result.get_data(), x1.size)

return result
Loading