Skip to content

Commit 1d70282

Browse files
authored
Move trigonometric functions to new FPRT structure (#80)
1 parent 0db29d3 commit 1d70282

File tree

6 files changed

+300
-609
lines changed

6 files changed

+300
-609
lines changed

dpnp/backend.pxd

Lines changed: 63 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,54 @@ from dpnp.dparray cimport dparray, dparray_shape_type
3232
cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncName": # need this namespace for Enum import
3333
cdef enum DPNPFuncName "DPNPFuncName":
3434
DPNP_FN_ADD
35+
DPNP_FN_ARCCOS
36+
DPNP_FN_ARCCOSH
37+
DPNP_FN_ARCSIN
38+
DPNP_FN_ARCSINH
39+
DPNP_FN_ARCTAN
3540
DPNP_FN_ARCTAN2
41+
DPNP_FN_ARCTANH
3642
DPNP_FN_ARGMAX
3743
DPNP_FN_ARGMIN
3844
DPNP_FN_ARGSORT
45+
DPNP_FN_CBRT
3946
DPNP_FN_CEIL
47+
DPNP_FN_COS
48+
DPNP_FN_COSH
4049
DPNP_FN_COV
50+
DPNP_FN_DEGREES
4151
DPNP_FN_DIVIDE
4252
DPNP_FN_DOT
4353
DPNP_FN_EIG
54+
DPNP_FN_EXP
55+
DPNP_FN_EXP2
56+
DPNP_FN_EXPM1
4457
DPNP_FN_FABS
4558
DPNP_FN_FLOOR
4659
DPNP_FN_FMOD
4760
DPNP_FN_HYPOT
61+
DPNP_FN_LOG
62+
DPNP_FN_LOG10
63+
DPNP_FN_LOG1P
64+
DPNP_FN_LOG2
4865
DPNP_FN_MATMUL
4966
DPNP_FN_MAXIMUM
5067
DPNP_FN_MINIMUM
5168
DPNP_FN_MULTIPLY
5269
DPNP_FN_POWER
5370
DPNP_FN_PROD
71+
DPNP_FN_RADIANS
5472
DPNP_FN_RAND
73+
DPNP_FN_RECIP
5574
DPNP_FN_SIGN
75+
DPNP_FN_SIN
76+
DPNP_FN_SINH
77+
DPNP_FN_SQRT
78+
DPNP_FN_SQUARE
5679
DPNP_FN_SUBTRACT
5780
DPNP_FN_SUM
81+
DPNP_FN_TAN
82+
DPNP_FN_TANH
5883
DPNP_FN_TRUNC
5984

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

96-
# Trigonometric part
97-
void custom_elemwise_acos_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
98-
void custom_elemwise_acosh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
99-
void custom_elemwise_asin_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
100-
void custom_elemwise_asinh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
101-
void custom_elemwise_atan_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
102-
void custom_elemwise_atanh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
103-
void custom_elemwise_cbrt_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
104-
void custom_elemwise_cos_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
105-
void custom_elemwise_cosh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
106-
void custom_elemwise_degrees_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
107-
void custom_elemwise_exp2_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
108-
void custom_elemwise_exp_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
109-
void custom_elemwise_expm1_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
110-
void custom_elemwise_log10_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
111-
void custom_elemwise_log1p_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
112-
void custom_elemwise_log2_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
113-
void custom_elemwise_log_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
114-
void custom_elemwise_radians_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
115-
void custom_elemwise_recip_c[_DataType](void * array1, void * result1, size_t size)
116-
void custom_elemwise_sin_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
117-
void custom_elemwise_sinh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
118-
void custom_elemwise_sqrt_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
119-
void custom_elemwise_square_c[_DataType](void * array1, void * result1, size_t size)
120-
void custom_elemwise_tan_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
121-
void custom_elemwise_tanh_c[_DataType_input, _DataType_output](void * array1, void * result1, size_t size)
122-
123121
# array manipulation routines
124122
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)
125123

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

140+
141+
# C function pointer to the C library template functions
142+
ctypedef void(*fptr_1in_1out_t)(void *, void * , size_t)
143+
ctypedef void(*fptr_2in_1out_t)(void *, void*, void*, size_t)
144+
145+
cdef dparray call_fptr_1in_1out(DPNPFuncName fptr_name, dparray x1, dparray_shape_type result_shape)
146+
cdef dparray call_fptr_2in_1out(DPNPFuncName fptr_name, dparray x1, dparray x2, dparray_shape_type result_shape)
147+
148+
142149
cpdef dparray dpnp_remainder(dparray array1, int scalar)
143150
cpdef dparray dpnp_astype(dparray array1, dtype_target)
144151

@@ -223,3 +230,32 @@ Searching functions
223230
"""
224231
cpdef dparray dpnp_argmax(dparray array1)
225232
cpdef dparray dpnp_argmin(dparray array1)
233+
234+
"""
235+
Trigonometric functions
236+
"""
237+
cpdef dparray dpnp_arccos(dparray array1)
238+
cpdef dparray dpnp_arccosh(dparray array1)
239+
cpdef dparray dpnp_arcsin(dparray array1)
240+
cpdef dparray dpnp_arcsinh(dparray array1)
241+
cpdef dparray dpnp_arctan(dparray array1)
242+
cpdef dparray dpnp_arctanh(dparray array1)
243+
cpdef dparray dpnp_cbrt(dparray array1)
244+
cpdef dparray dpnp_cos(dparray array1)
245+
cpdef dparray dpnp_cosh(dparray array1)
246+
cpdef dparray dpnp_degrees(dparray array1)
247+
cpdef dparray dpnp_exp(dparray array1)
248+
cpdef dparray dpnp_exp2(dparray array1)
249+
cpdef dparray dpnp_expm1(dparray array1)
250+
cpdef dparray dpnp_log(dparray array1)
251+
cpdef dparray dpnp_log10(dparray array1)
252+
cpdef dparray dpnp_log1p(dparray array1)
253+
cpdef dparray dpnp_log2(dparray array1)
254+
cpdef dparray dpnp_radians(dparray array1)
255+
cpdef dparray dpnp_recip(dparray array1)
256+
cpdef dparray dpnp_sin(dparray array1)
257+
cpdef dparray dpnp_sinh(dparray array1)
258+
cpdef dparray dpnp_sqrt(dparray array1)
259+
cpdef dparray dpnp_square(dparray array1)
260+
cpdef dparray dpnp_tan(dparray array1)
261+
cpdef dparray dpnp_tanh(dparray array1)

dpnp/backend.pyx

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -254,3 +254,42 @@ cpdef dpnp_DPNPFuncType_to_dtype(size_t type):
254254
return numpy.int32
255255
else:
256256
checker_throw_type_error("dpnp_DPNPFuncType_to_dtype", type)
257+
258+
259+
cdef dparray call_fptr_1in_1out(DPNPFuncName fptr_name, dparray x1, dparray_shape_type result_shape):
260+
261+
""" Convert string type names (dparray.dtype) to C enum DPNPFuncType """
262+
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(x1.dtype)
263+
264+
""" get the FPTR data structure """
265+
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(fptr_name, param1_type, param1_type)
266+
267+
result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
268+
""" Create result array with type given by FPTR data """
269+
cdef dparray result = dparray(result_shape, dtype=result_type)
270+
271+
cdef fptr_1in_1out_t func = <fptr_1in_1out_t > kernel_data.ptr
272+
""" Call FPTR function """
273+
func(x1.get_data(), result.get_data(), x1.size)
274+
275+
return result
276+
277+
278+
cdef dparray call_fptr_2in_1out(DPNPFuncName fptr_name, dparray x1, dparray x2, dparray_shape_type result_shape):
279+
280+
""" Convert string type names (dparray.dtype) to C enum DPNPFuncType """
281+
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(x1.dtype)
282+
cdef DPNPFuncType param2_type = dpnp_dtype_to_DPNPFuncType(x2.dtype)
283+
284+
""" get the FPTR data structure """
285+
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(fptr_name, param1_type, param2_type)
286+
287+
result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
288+
""" Create result array with type given by FPTR data """
289+
cdef dparray result = dparray(result_shape, dtype=result_type)
290+
291+
cdef fptr_2in_1out_t func = <fptr_2in_1out_t > kernel_data.ptr
292+
""" Call FPTR function """
293+
func(x1.get_data(), x2.get_data(), result.get_data(), x1.size)
294+
295+
return result

0 commit comments

Comments
 (0)