Skip to content

Commit 073edaa

Browse files
authored
Moved all the functions to FPTR structure (#86)
1 parent 2189bc0 commit 073edaa

10 files changed

+156
-194
lines changed

dpnp/backend.pxd

Lines changed: 8 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,7 @@ cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncName": # n
5757
DPNP_FN_FABS
5858
DPNP_FN_FLOOR
5959
DPNP_FN_FMOD
60+
DPNP_FN_GAUSSIAN
6061
DPNP_FN_HYPOT
6162
DPNP_FN_LOG
6263
DPNP_FN_LOG10
@@ -68,18 +69,21 @@ cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncName": # n
6869
DPNP_FN_MULTIPLY
6970
DPNP_FN_POWER
7071
DPNP_FN_PROD
72+
DPNP_FN_UNIFORM
7173
DPNP_FN_RADIANS
72-
DPNP_FN_RAND
74+
DPNP_FN_RANDOM
7375
DPNP_FN_RECIP
7476
DPNP_FN_SIGN
7577
DPNP_FN_SIN
7678
DPNP_FN_SINH
79+
DPNP_FN_SORT
7780
DPNP_FN_SQRT
7881
DPNP_FN_SQUARE
7982
DPNP_FN_SUBTRACT
8083
DPNP_FN_SUM
8184
DPNP_FN_TAN
8285
DPNP_FN_TANH
86+
DPNP_FN_TRANSPOSE
8387
DPNP_FN_TRUNC
8488

8589
cdef extern from "backend/backend_iface_fptr.hpp" namespace "DPNPFuncType": # need this namespace for Enum import
@@ -110,37 +114,14 @@ cdef extern from "backend/backend_iface.hpp":
110114
void dpnp_memory_free_c(void * ptr)
111115
void dpnp_memory_memcpy_c(void * dst, const void * src, size_t size_in_bytes)
112116

113-
void dpnp_blas_gemm_c[_DataType](void * array1, void * array2, void * result1, size_t size_m, size_t size_n, size_t size_k)
114-
void custom_blas_gemm_c[_DataType](void * array1, void * array2, void * result1, size_t size_m, size_t size_n, size_t size_k)
115-
116-
# Linear Algebra part
117-
void custom_blas_dot_c[_DataType](void * array1, void * array2, void * result1, size_t size)
118-
void mkl_blas_dot_c[_DataType](void * array1, void * array2, void * result1, size_t size)
119-
void mkl_lapack_syevd_c[_DataType](void * array1, void * result1, size_t size)
120-
121-
# array manipulation routines
122-
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)
123-
124117
# Random module routines
125-
void mkl_rng_gaussian[_DataType](void * result, size_t size)
126-
void mkl_rng_uniform[_DataType](void * result, size_t size)
127-
void mkl_rng_uniform_mt19937[_DataType](void * result, long low, long high, size_t size)
128-
129-
# Statistics routines
130-
void custom_cov_c[_DataType](void * array, void * result, size_t nrows, size_t ncols)
131-
132-
# Sorting routines
133-
void custom_argsort_c[_DataType, _idx_DataType](void * array, void * result, size_t size)
134-
void custom_sort_c[_DataType](void * array, void * result, size_t size)
135-
136-
# Sorting routines
137-
void custom_argmax_c[_DataType, _idx_DataType](void * array, void * result, size_t size)
138-
void custom_argmin_c[_DataType, _idx_DataType](void * array, void * result, size_t size)
118+
# void mkl_rng_uniform_mt19937[_DataType](void * result, long low, long high, size_t size)
139119

140120

141121
# C function pointer to the C library template functions
142122
ctypedef void(*fptr_1in_1out_t)(void *, void * , size_t)
143123
ctypedef void(*fptr_2in_1out_t)(void *, void*, void*, size_t)
124+
ctypedef void(*fptr_blas_gemm_2in_1out_t)(void *, void *, void *, size_t, size_t, size_t)
144125

145126
cdef dparray call_fptr_1in_1out(DPNPFuncName fptr_name, dparray x1, dparray_shape_type result_shape)
146127
cdef dparray call_fptr_2in_1out(DPNPFuncName fptr_name, dparray x1, dparray x2, dparray_shape_type result_shape)
@@ -176,6 +157,7 @@ cpdef dparray dpnp_not_equal(dparray input1, dparray input2)
176157
"""
177158
Linear algebra
178159
"""
160+
cpdef dparray dpnp_dot(dparray in_array1, dparray in_array2)
179161
cpdef dparray dpnp_matmul(dparray in_array1, dparray in_array2)
180162

181163

dpnp/backend.pyx

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,6 @@ cpdef dparray dpnp_init_val(shape, dtype, value):
125125
cpdef dparray dpnp_matmul(dparray in_array1, dparray in_array2):
126126
cdef vector[Py_ssize_t] shape_result
127127

128-
call_type = in_array1.dtype
129-
130128
cdef vector[Py_ssize_t] shape1 = in_array1.shape
131129
cdef vector[Py_ssize_t] shape2 = in_array2.shape
132130

@@ -177,25 +175,22 @@ cpdef dparray dpnp_matmul(dparray in_array1, dparray in_array2):
177175
"""
178176
shape_result = shape1[:-1] + shape2[1:]
179177

180-
cdef dparray result = dparray(shape_result, dtype=call_type)
178+
# convert string type names (dparray.dtype) to C enum DPNPFuncType
179+
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(in_array1.dtype)
180+
cdef DPNPFuncType param2_type = dpnp_dtype_to_DPNPFuncType(in_array2.dtype)
181+
182+
# get the FPTR data structure
183+
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_MATMUL, param1_type, param2_type)
184+
185+
result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
186+
# ceate result array with type given by FPTR data
187+
cdef dparray result = dparray(shape_result, dtype=result_type)
181188
if result.size == 0:
182189
return result
183190

184-
if call_type == numpy.float64:
185-
dpnp_blas_gemm_c[double](in_array1.get_data(), in_array2.get_data(),
186-
result.get_data(), size_m, size_n, size_k)
187-
elif call_type == numpy.float32:
188-
dpnp_blas_gemm_c[float](in_array1.get_data(), in_array2.get_data(),
189-
result.get_data(), size_m, size_n, size_k)
190-
elif call_type == numpy.int64:
191-
custom_blas_gemm_c[long](in_array1.get_data(), in_array2.get_data(),
192-
result.get_data(), size_m, size_n, size_k)
193-
elif call_type == numpy.int32:
194-
custom_blas_gemm_c[int](in_array1.get_data(), in_array2.get_data(),
195-
result.get_data(), size_m, size_n, size_k)
196-
else:
197-
raise TypeError(
198-
f"Intel NumPy {call_type} matmul({call_type} A, {call_type} B, {call_type} result) is not supported.")
191+
cdef fptr_blas_gemm_2in_1out_t func = <fptr_blas_gemm_2in_1out_t > kernel_data.ptr
192+
# call FPTR function
193+
func(in_array1.get_data(), in_array2.get_data(), result.get_data(), size_m, size_n, size_k)
199194

200195
return result
201196

dpnp/backend/backend_iface_fptr.cpp

Lines changed: 26 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -241,14 +241,10 @@ static func_map_t func_map_init()
241241
fmap[DPNPFuncName::DPNP_FN_ARGMIN][eft_DBL][eft_INT] = {eft_INT, (void*)custom_argmin_c<double, int>};
242242
fmap[DPNPFuncName::DPNP_FN_ARGMIN][eft_DBL][eft_LNG] = {eft_LNG, (void*)custom_argmin_c<double, long>};
243243

244-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_INT][eft_INT] = {eft_INT, (void*)custom_argsort_c<int, int>};
245-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_INT][eft_LNG] = {eft_LNG, (void*)custom_argsort_c<int, long>};
246-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_LNG][eft_INT] = {eft_INT, (void*)custom_argsort_c<long, int>};
244+
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_INT][eft_INT] = {eft_LNG, (void*)custom_argsort_c<int, long>};
247245
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_LNG][eft_LNG] = {eft_LNG, (void*)custom_argsort_c<long, long>};
248-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_FLT][eft_INT] = {eft_INT, (void*)custom_argsort_c<float, int>};
249-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_FLT][eft_LNG] = {eft_LNG, (void*)custom_argsort_c<float, long>};
250-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_DBL][eft_INT] = {eft_INT, (void*)custom_argsort_c<double, int>};
251-
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_DBL][eft_LNG] = {eft_LNG, (void*)custom_argsort_c<double, long>};
246+
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_FLT][eft_FLT] = {eft_LNG, (void*)custom_argsort_c<float, long>};
247+
fmap[DPNPFuncName::DPNP_FN_ARGSORT][eft_DBL][eft_DBL] = {eft_LNG, (void*)custom_argsort_c<double, long>};
252248

253249
fmap[DPNPFuncName::DPNP_FN_CBRT][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_cbrt_c<int, double>};
254250
fmap[DPNPFuncName::DPNP_FN_CBRT][eft_LNG][eft_LNG] = {eft_DBL, (void*)custom_elemwise_cbrt_c<long, double>};
@@ -270,6 +266,9 @@ static func_map_t func_map_init()
270266
fmap[DPNPFuncName::DPNP_FN_COSH][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_cosh_c<float, float>};
271267
fmap[DPNPFuncName::DPNP_FN_COSH][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_cosh_c<double, double>};
272268

269+
fmap[DPNPFuncName::DPNP_FN_COV][eft_INT][eft_INT] = {eft_DBL, (void*)custom_cov_c<double>};
270+
fmap[DPNPFuncName::DPNP_FN_COV][eft_LNG][eft_LNG] = {eft_DBL, (void*)custom_cov_c<double>};
271+
fmap[DPNPFuncName::DPNP_FN_COV][eft_FLT][eft_FLT] = {eft_DBL, (void*)custom_cov_c<double>};
273272
fmap[DPNPFuncName::DPNP_FN_COV][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_cov_c<double>};
274273

275274
fmap[DPNPFuncName::DPNP_FN_DEGREES][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_degrees_c<int, double>};
@@ -311,6 +310,8 @@ static func_map_t func_map_init()
311310
fmap[DPNPFuncName::DPNP_FN_DOT][eft_FLT][eft_FLT] = {eft_FLT, (void*)mkl_blas_dot_c<float>};
312311
fmap[DPNPFuncName::DPNP_FN_DOT][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_blas_dot_c<double>};
313312

313+
fmap[DPNPFuncName::DPNP_FN_EIG][eft_INT][eft_INT] = {eft_DBL, (void*)mkl_lapack_syevd_c<double>};
314+
fmap[DPNPFuncName::DPNP_FN_EIG][eft_LNG][eft_LNG] = {eft_DBL, (void*)mkl_lapack_syevd_c<double>};
314315
fmap[DPNPFuncName::DPNP_FN_EIG][eft_FLT][eft_FLT] = {eft_FLT, (void*)mkl_lapack_syevd_c<float>};
315316
fmap[DPNPFuncName::DPNP_FN_EIG][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_lapack_syevd_c<double>};
316317

@@ -359,6 +360,8 @@ static func_map_t func_map_init()
359360
fmap[DPNPFuncName::DPNP_FN_FMOD][eft_DBL][eft_DBL] = {eft_DBL,
360361
(void*)custom_elemwise_fmod_c<double, double, double>};
361362

363+
fmap[DPNPFuncName::DPNP_FN_GAUSSIAN][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_rng_gaussian<double>};
364+
362365
fmap[DPNPFuncName::DPNP_FN_HYPOT][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_hypot_c<int, int, double>};
363366
fmap[DPNPFuncName::DPNP_FN_HYPOT][eft_INT][eft_LNG] = {eft_DBL, (void*)custom_elemwise_hypot_c<int, long, double>};
364367
fmap[DPNPFuncName::DPNP_FN_HYPOT][eft_INT][eft_FLT] = {eft_DBL, (void*)custom_elemwise_hypot_c<int, float, double>};
@@ -540,17 +543,20 @@ static func_map_t func_map_init()
540543
fmap[DPNPFuncName::DPNP_FN_PROD][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_prod_c<float>};
541544
fmap[DPNPFuncName::DPNP_FN_PROD][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_prod_c<double>};
542545

546+
fmap[DPNPFuncName::DPNP_FN_UNIFORM][eft_INT][eft_INT] = {eft_INT, (void*)mkl_rng_uniform<int>};
547+
fmap[DPNPFuncName::DPNP_FN_UNIFORM][eft_FLT][eft_FLT] = {eft_FLT, (void*)mkl_rng_uniform<float>};
548+
fmap[DPNPFuncName::DPNP_FN_UNIFORM][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_rng_uniform<double>};
549+
543550
fmap[DPNPFuncName::DPNP_FN_RADIANS][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_radians_c<int, double>};
544551
fmap[DPNPFuncName::DPNP_FN_RADIANS][eft_LNG][eft_LNG] = {eft_DBL, (void*)custom_elemwise_radians_c<long, double>};
545552
fmap[DPNPFuncName::DPNP_FN_RADIANS][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_radians_c<float, float>};
546553
fmap[DPNPFuncName::DPNP_FN_RADIANS][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_radians_c<double, double>};
547554

555+
fmap[DPNPFuncName::DPNP_FN_RANDOM][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_rng_uniform<double>};
556+
548557
fmap[DPNPFuncName::DPNP_FN_RECIP][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_recip_c<float>};
549558
fmap[DPNPFuncName::DPNP_FN_RECIP][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_recip_c<double>};
550559

551-
fmap[DPNPFuncName::DPNP_FN_RAND][eft_FLT][eft_FLT] = {eft_FLT, (void*)mkl_rng_uniform<float>};
552-
fmap[DPNPFuncName::DPNP_FN_RAND][eft_DBL][eft_DBL] = {eft_DBL, (void*)mkl_rng_uniform<double>};
553-
554560
fmap[DPNPFuncName::DPNP_FN_SIGN][eft_INT][eft_INT] = {eft_INT, (void*)custom_elemwise_sign_c<int>};
555561
fmap[DPNPFuncName::DPNP_FN_SIGN][eft_LNG][eft_LNG] = {eft_LNG, (void*)custom_elemwise_sign_c<long>};
556562
fmap[DPNPFuncName::DPNP_FN_SIGN][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_sign_c<float>};
@@ -566,6 +572,11 @@ static func_map_t func_map_init()
566572
fmap[DPNPFuncName::DPNP_FN_SINH][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_sinh_c<float, float>};
567573
fmap[DPNPFuncName::DPNP_FN_SINH][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_sinh_c<double, double>};
568574

575+
fmap[DPNPFuncName::DPNP_FN_SORT][eft_INT][eft_INT] = {eft_INT, (void*)custom_sort_c<int>};
576+
fmap[DPNPFuncName::DPNP_FN_SORT][eft_LNG][eft_LNG] = {eft_LNG, (void*)custom_sort_c<long>};
577+
fmap[DPNPFuncName::DPNP_FN_SORT][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_sort_c<float>};
578+
fmap[DPNPFuncName::DPNP_FN_SORT][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_sort_c<double>};
579+
569580
fmap[DPNPFuncName::DPNP_FN_SQRT][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_sqrt_c<int, double>};
570581
fmap[DPNPFuncName::DPNP_FN_SQRT][eft_LNG][eft_LNG] = {eft_DBL, (void*)custom_elemwise_sqrt_c<long, double>};
571582
fmap[DPNPFuncName::DPNP_FN_SQRT][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_sqrt_c<float, float>};
@@ -624,6 +635,11 @@ static func_map_t func_map_init()
624635
fmap[DPNPFuncName::DPNP_FN_TANH][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_tanh_c<float, float>};
625636
fmap[DPNPFuncName::DPNP_FN_TANH][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_tanh_c<double, double>};
626637

638+
fmap[DPNPFuncName::DPNP_FN_TRANSPOSE][eft_INT][eft_INT] = {eft_INT, (void*)custom_elemwise_transpose_c<int>};
639+
fmap[DPNPFuncName::DPNP_FN_TRANSPOSE][eft_LNG][eft_LNG] = {eft_LNG, (void*)custom_elemwise_transpose_c<long>};
640+
fmap[DPNPFuncName::DPNP_FN_TRANSPOSE][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_transpose_c<float>};
641+
fmap[DPNPFuncName::DPNP_FN_TRANSPOSE][eft_DBL][eft_DBL] = {eft_DBL, (void*)custom_elemwise_transpose_c<double>};
642+
627643
fmap[DPNPFuncName::DPNP_FN_TRUNC][eft_INT][eft_INT] = {eft_DBL, (void*)custom_elemwise_trunc_c<int, double>};
628644
fmap[DPNPFuncName::DPNP_FN_TRUNC][eft_LNG][eft_LNG] = {eft_DBL, (void*)custom_elemwise_trunc_c<long, double>};
629645
fmap[DPNPFuncName::DPNP_FN_TRUNC][eft_FLT][eft_FLT] = {eft_FLT, (void*)custom_elemwise_trunc_c<float, float>};

dpnp/backend/backend_iface_fptr.hpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ enum class DPNPFuncName : size_t
8686
DPNP_FN_FABS, /**< Used in numpy.fabs() implementation */
8787
DPNP_FN_FLOOR, /**< Used in numpy.floor() implementation */
8888
DPNP_FN_FMOD, /**< Used in numpy.fmod() implementation */
89+
DPNP_FN_GAUSSIAN, /**< Used in numpy.random.randn() implementation */
8990
DPNP_FN_HYPOT, /**< Used in numpy.hypot() implementation */
9091
DPNP_FN_LOG, /**< Used in numpy.log() implementation */
9192
DPNP_FN_LOG10, /**< Used in numpy.log10() implementation */
@@ -97,18 +98,21 @@ enum class DPNPFuncName : size_t
9798
DPNP_FN_MULTIPLY, /**< Used in numpy.multiply() implementation */
9899
DPNP_FN_POWER, /**< Used in numpy.random.power() implementation */
99100
DPNP_FN_PROD, /**< Used in numpy.prod() implementation */
101+
DPNP_FN_UNIFORM, /**< Used in numpy.random.uniform() implementation */
100102
DPNP_FN_RADIANS, /**< Used in numpy.radians() implementation */
103+
DPNP_FN_RANDOM, /**< Used in numpy.random.random() implementation */
101104
DPNP_FN_RECIP, /**< Used in numpy.recip() implementation */
102-
DPNP_FN_RAND, /**< Used in numpy.random.rand() implementation */
103105
DPNP_FN_SIGN, /**< Used in numpy.sign() implementation */
104106
DPNP_FN_SIN, /**< Used in numpy.sin() implementation */
105107
DPNP_FN_SINH, /**< Used in numpy.sinh() implementation */
108+
DPNP_FN_SORT, /**< Used in numpy.sort() implementation */
106109
DPNP_FN_SQRT, /**< Used in numpy.sqrt() implementation */
107110
DPNP_FN_SQUARE, /**< Used in numpy.square() implementation */
108111
DPNP_FN_SUBTRACT, /**< Used in numpy.subtract() implementation */
109112
DPNP_FN_SUM, /**< Used in numpy.sum() implementation */
110113
DPNP_FN_TAN, /**< Used in numpy.tan() implementation */
111114
DPNP_FN_TANH, /**< Used in numpy.tanh() implementation */
115+
DPNP_FN_TRANSPOSE, /**< Used in numpy.transpose() implementation */
112116
DPNP_FN_TRUNC, /**< Used in numpy.trunc() implementation */
113117
DPNP_FN_LAST /**< The latest element of the enumeration */
114118
};

dpnp/backend_linearalgebra.pyx

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -47,8 +47,6 @@ cpdef dparray dpnp_dot(dparray in_array1, dparray in_array2):
4747
cdef vector[Py_ssize_t] shape1 = in_array1.shape
4848
cdef vector[Py_ssize_t] shape2 = in_array2.shape
4949

50-
call_type = in_array1.dtype
51-
5250
cdef size_t dim1 = in_array1.ndim
5351
cdef size_t dim2 = in_array2.ndim
5452

@@ -72,17 +70,20 @@ cpdef dparray dpnp_dot(dparray in_array1, dparray in_array2):
7270
if size1 != size2:
7371
raise checker_throw_runtime_error("dpnp_dot", "input vectors must be of equal size")
7472

75-
cdef dparray result = dparray((1,), dtype=call_type)
76-
if call_type == numpy.float64:
77-
mkl_blas_dot_c[double](in_array1.get_data(), in_array2.get_data(), result.get_data(), size1)
78-
elif call_type == numpy.float32:
79-
mkl_blas_dot_c[float](in_array1.get_data(), in_array2.get_data(), result.get_data(), size1)
80-
elif call_type == numpy.int64:
81-
custom_blas_dot_c[long](in_array1.get_data(), in_array2.get_data(), result.get_data(), size1)
82-
elif call_type == numpy.int32:
83-
custom_blas_dot_c[int](in_array1.get_data(), in_array2.get_data(), result.get_data(), size1)
84-
else:
85-
checker_throw_type_error("dpnp_dot", call_type)
73+
# convert string type names (dparray.dtype) to C enum DPNPFuncType
74+
cdef DPNPFuncType param1_type = dpnp_dtype_to_DPNPFuncType(in_array1.dtype)
75+
cdef DPNPFuncType param2_type = dpnp_dtype_to_DPNPFuncType(in_array2.dtype)
76+
77+
# get the FPTR data structure
78+
cdef DPNPFuncData kernel_data = get_dpnp_function_ptr(DPNP_FN_DOT, param1_type, param2_type)
79+
80+
result_type = dpnp_DPNPFuncType_to_dtype( < size_t > kernel_data.return_type)
81+
# ceate result array with type given by FPTR data
82+
cdef dparray result = dparray((1,), dtype=result_type)
83+
84+
cdef fptr_2in_1out_t func = <fptr_2in_1out_t > kernel_data.ptr
85+
# call FPTR function
86+
func(in_array1.get_data(), in_array2.get_data(), result.get_data(), size1)
8687

8788
return result
8889

0 commit comments

Comments
 (0)