@@ -50,25 +50,33 @@ void custom_elemwise_absolute_c(void* array1_in, const std::vector<long>& input_
50
50
size_t * input_offset_shape = reinterpret_cast <size_t *>(dpnp_memory_alloc_c (input_shape_size * sizeof (long )));
51
51
size_t * result_offset_shape = reinterpret_cast <size_t *>(dpnp_memory_alloc_c (input_shape_size * sizeof (long )));
52
52
53
- cl::sycl::range<1 > gws (size);
54
- auto kernel_parallel_for_func = [=](cl::sycl::id<1 > global_id) {
55
- const size_t idx = global_id[0 ];
53
+ if constexpr (std::is_same<_DataType, double >::value || std::is_same<_DataType, float >::value)
54
+ {
55
+ // https://docs.oneapi.com/versions/latest/onemkl/abs.html
56
+ event = oneapi::mkl::vm::abs (DPNP_QUEUE, size, array1, result);
57
+ }
58
+ else
59
+ {
60
+ cl::sycl::range<1 > gws (size);
61
+ auto kernel_parallel_for_func = [=](cl::sycl::id<1 > global_id) {
62
+ const size_t idx = global_id[0 ];
56
63
57
- if (array1[idx] >= 0 )
58
- {
59
- result[idx] = array1[idx];
60
- }
61
- else
62
- {
63
- result[idx] = -1 * array1[idx];
64
- }
65
- };
64
+ if (array1[idx] >= 0 )
65
+ {
66
+ result[idx] = array1[idx];
67
+ }
68
+ else
69
+ {
70
+ result[idx] = -1 * array1[idx];
71
+ }
72
+ };
66
73
67
- auto kernel_func = [&](cl::sycl::handler& cgh) {
68
- cgh.parallel_for <class custom_elemwise_absolute_c_kernel <_DataType>>(gws, kernel_parallel_for_func);
69
- };
74
+ auto kernel_func = [&](cl::sycl::handler& cgh) {
75
+ cgh.parallel_for <class custom_elemwise_absolute_c_kernel <_DataType>>(gws, kernel_parallel_for_func);
76
+ };
70
77
71
- event = DPNP_QUEUE.submit (kernel_func);
78
+ event = DPNP_QUEUE.submit (kernel_func);
79
+ }
72
80
73
81
event.wait ();
74
82
0 commit comments