Skip to content

Commit dd78cf7

Browse files
committed
Splits elementwise functions into separate source files
1 parent cd74a60 commit dd78cf7

File tree

145 files changed

+12570
-5676
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

145 files changed

+12570
-5676
lines changed

dpctl/tensor/CMakeLists.txt

Lines changed: 80 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,77 @@ if(WIN32)
3030
endif()
3131
endif()
3232

33+
set(_elementwise_sources
34+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/elementwise_common.cpp
35+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/abs.cpp
36+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/acos.cpp
37+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/acosh.cpp
38+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/add.cpp
39+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/asin.cpp
40+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/asinh.cpp
41+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/atan.cpp
42+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/atan2.cpp
43+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/atanh.cpp
44+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_and.cpp
45+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_invert.cpp
46+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_left_shift.cpp
47+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_or.cpp
48+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_right_shift.cpp
49+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/bitwise_xor.cpp
50+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/cbrt.cpp
51+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/ceil.cpp
52+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/conj.cpp
53+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/copysign.cpp
54+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/cos.cpp
55+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/cosh.cpp
56+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/equal.cpp
57+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/exp.cpp
58+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/exp2.cpp
59+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/expm1.cpp
60+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/floor_divide.cpp
61+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/floor.cpp
62+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/greater_equal.cpp
63+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/greater.cpp
64+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/hypot.cpp
65+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/imag.cpp
66+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/isfinite.cpp
67+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/isinf.cpp
68+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/isnan.cpp
69+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/less_equal.cpp
70+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/less.cpp
71+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/log.cpp
72+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/log1p.cpp
73+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/log2.cpp
74+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/log10.cpp
75+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/logaddexp.cpp
76+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/logical_and.cpp
77+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/logical_not.cpp
78+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/logical_or.cpp
79+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/logical_xor.cpp
80+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/maximum.cpp
81+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/minimum.cpp
82+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/multiply.cpp
83+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/negative.cpp
84+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/not_equal.cpp
85+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/positive.cpp
86+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/pow.cpp
87+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/proj.cpp
88+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/real.cpp
89+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/remainder.cpp
90+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/round.cpp
91+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/rsqrt.cpp
92+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/sign.cpp
93+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/signbit.cpp
94+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/sin.cpp
95+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/sinh.cpp
96+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/sqrt.cpp
97+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/square.cpp
98+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/subtract.cpp
99+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/tan.cpp
100+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/tanh.cpp
101+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/true_divide.cpp
102+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/trunc.cpp
103+
)
33104
set(_tensor_impl_sources
34105
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/tensor_py.cpp
35106
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/accumulators.cpp
@@ -47,13 +118,12 @@ set(_tensor_impl_sources
47118
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/where.cpp
48119
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/boolean_reductions.cpp
49120
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/device_support_queries.cpp
50-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions1.cpp
51-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions2.cpp
52-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions3.cpp
53-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions4.cpp
54121
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/repeat.cpp
55122
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/reduction_over_axis.cpp
56123
)
124+
list(APPEND _tensor_impl_sources
125+
${_elementwise_sources}
126+
)
57127

58128
set(python_module_name _tensor_impl)
59129
pybind11_add_module(${python_module_name} MODULE ${_tensor_impl_sources})
@@ -66,11 +136,10 @@ endif()
66136
set(_no_fast_math_sources
67137
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/full_ctor.cpp
68138
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/linear_sequences.cpp
69-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions1.cpp
70-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions2.cpp
71-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions3.cpp
72-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions4.cpp
73-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/reduction_over_axis.cpp
139+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/reduction_over_axis.cpp
140+
)
141+
list(APPEND _no_fast_math_sources
142+
${_elementwise_sources}
74143
)
75144
foreach(_src_fn ${_no_fast_math_sources})
76145
get_source_file_property(_cmpl_options_prop ${_src_fn} COMPILE_OPTIONS)
@@ -82,7 +151,8 @@ foreach(_src_fn ${_no_fast_math_sources})
82151
endforeach()
83152
if (UNIX)
84153
set_source_files_properties(
85-
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions.cpp
154+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/abs.cpp
155+
${CMAKE_CURRENT_SOURCE_DIR}/libtensor/source/elementwise_functions/sqrt.cpp
86156
PROPERTIES COMPILE_DEFINITIONS "USE_STD_ABS_FOR_COMPLEX_TYPES;USE_STD_SQRT_FOR_COMPLEX_TYPES")
87157
endif()
88158
target_compile_options(${python_module_name} PRIVATE -fno-sycl-id-queries-fit-in-int)
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
//===----------- Implementation of _tensor_impl module ---------*-C++-*-/===//
2+
//
3+
// Data Parallel Control (dpctl)
4+
//
5+
// Copyright 2020-2023 Intel Corporation
6+
//
7+
// Licensed under the Apache License, Version 2.0 (the "License");
8+
// you may not use this file except in compliance with the License.
9+
// You may obtain a copy of the License at
10+
//
11+
// http://www.apache.org/licenses/LICENSE-2.0
12+
//
13+
// Unless required by applicable law or agreed to in writing, software
14+
// distributed under the License is distributed on an "AS IS" BASIS,
15+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
// See the License for the specific language governing permissions and
17+
// limitations under the License.
18+
//
19+
//===----------------------------------------------------------------------===//
20+
///
21+
/// \file
22+
/// This file defines functions of dpctl.tensor._tensor_impl extensions,
23+
/// specifically functions for elementwise operations.
24+
//===----------------------------------------------------------------------===//
25+
26+
#include "dpctl4pybind11.hpp"
27+
#include <CL/sycl.hpp>
28+
#include <pybind11/numpy.h>
29+
#include <pybind11/pybind11.h>
30+
#include <pybind11/stl.h>
31+
#include <utility>
32+
33+
#include "abs.hpp"
34+
#include "elementwise_functions.hpp"
35+
#include "utils/type_dispatch.hpp"
36+
37+
#include "kernels/elementwise_functions/abs.hpp"
38+
#include "kernels/elementwise_functions/common.hpp"
39+
40+
namespace py = pybind11;
41+
42+
namespace dpctl
43+
{
44+
namespace tensor
45+
{
46+
namespace py_internal
47+
{
48+
49+
namespace td_ns = dpctl::tensor::type_dispatch;
50+
51+
namespace ew_cmn_ns = dpctl::tensor::kernels::elementwise_common;
52+
using ew_cmn_ns::unary_contig_impl_fn_ptr_t;
53+
using ew_cmn_ns::unary_strided_impl_fn_ptr_t;
54+
55+
// U01: ==== ABS (x)
56+
namespace impl
57+
{
58+
59+
namespace abs_fn_ns = dpctl::tensor::kernels::abs;
60+
61+
static unary_contig_impl_fn_ptr_t abs_contig_dispatch_vector[td_ns::num_types];
62+
static int abs_output_typeid_vector[td_ns::num_types];
63+
static unary_strided_impl_fn_ptr_t
64+
abs_strided_dispatch_vector[td_ns::num_types];
65+
66+
void populate_abs_dispatch_vectors(void)
67+
{
68+
using namespace td_ns;
69+
namespace fn_ns = abs_fn_ns;
70+
71+
using fn_ns::AbsContigFactory;
72+
DispatchVectorBuilder<unary_contig_impl_fn_ptr_t, AbsContigFactory,
73+
num_types>
74+
dvb1;
75+
dvb1.populate_dispatch_vector(abs_contig_dispatch_vector);
76+
77+
using fn_ns::AbsStridedFactory;
78+
DispatchVectorBuilder<unary_strided_impl_fn_ptr_t, AbsStridedFactory,
79+
num_types>
80+
dvb2;
81+
dvb2.populate_dispatch_vector(abs_strided_dispatch_vector);
82+
83+
using fn_ns::AbsTypeMapFactory;
84+
DispatchVectorBuilder<int, AbsTypeMapFactory, num_types> dvb3;
85+
dvb3.populate_dispatch_vector(abs_output_typeid_vector);
86+
};
87+
88+
} // namespace impl
89+
90+
void init_abs(py::module_ m)
91+
{
92+
using arrayT = dpctl::tensor::usm_ndarray;
93+
using event_vecT = std::vector<sycl::event>;
94+
{
95+
impl::populate_abs_dispatch_vectors();
96+
using impl::abs_contig_dispatch_vector;
97+
using impl::abs_output_typeid_vector;
98+
using impl::abs_strided_dispatch_vector;
99+
100+
auto abs_pyapi = [&](const arrayT &src, const arrayT &dst,
101+
sycl::queue &exec_q,
102+
const event_vecT &depends = {}) {
103+
return py_unary_ufunc(
104+
src, dst, exec_q, depends, abs_output_typeid_vector,
105+
abs_contig_dispatch_vector, abs_strided_dispatch_vector);
106+
};
107+
m.def("_abs", abs_pyapi, "", py::arg("src"), py::arg("dst"),
108+
py::arg("sycl_queue"), py::arg("depends") = py::list());
109+
110+
auto abs_result_type_pyapi = [&](const py::dtype &dtype) {
111+
return py_unary_ufunc_result_type(dtype, abs_output_typeid_vector);
112+
};
113+
m.def("_abs_result_type", abs_result_type_pyapi);
114+
}
115+
}
116+
117+
} // namespace py_internal
118+
} // namespace tensor
119+
} // namespace dpctl

dpctl/tensor/libtensor/source/elementwise_functions3.hpp renamed to dpctl/tensor/libtensor/source/elementwise_functions/abs.hpp

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,16 @@
2626
#pragma once
2727
#include <pybind11/pybind11.h>
2828

29+
namespace py = pybind11;
30+
2931
namespace dpctl
3032
{
3133
namespace tensor
3234
{
3335
namespace py_internal
3436
{
3537

36-
extern void init_elementwise_functions3(py::module_ m);
38+
extern void init_abs(py::module_ m);
3739

3840
} // namespace py_internal
3941
} // namespace tensor
Lines changed: 119 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,119 @@
1+
//===----------- Implementation of _tensor_impl module ---------*-C++-*-/===//
2+
//
3+
// Data Parallel Control (dpctl)
4+
//
5+
// Copyright 2020-2023 Intel Corporation
6+
//
7+
// Licensed under the Apache License, Version 2.0 (the "License");
8+
// you may not use this file except in compliance with the License.
9+
// You may obtain a copy of the License at
10+
//
11+
// http://www.apache.org/licenses/LICENSE-2.0
12+
//
13+
// Unless required by applicable law or agreed to in writing, software
14+
// distributed under the License is distributed on an "AS IS" BASIS,
15+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16+
// See the License for the specific language governing permissions and
17+
// limitations under the License.
18+
//
19+
//===----------------------------------------------------------------------===//
20+
///
21+
/// \file
22+
/// This file defines functions of dpctl.tensor._tensor_impl extensions,
23+
/// specifically functions for elementwise operations.
24+
//===----------------------------------------------------------------------===//
25+
26+
#include "dpctl4pybind11.hpp"
27+
#include <CL/sycl.hpp>
28+
#include <pybind11/numpy.h>
29+
#include <pybind11/pybind11.h>
30+
#include <pybind11/stl.h>
31+
#include <utility>
32+
33+
#include "acos.hpp"
34+
#include "elementwise_functions.hpp"
35+
#include "utils/type_dispatch.hpp"
36+
37+
#include "kernels/elementwise_functions/acos.hpp"
38+
#include "kernels/elementwise_functions/common.hpp"
39+
40+
namespace py = pybind11;
41+
42+
namespace dpctl
43+
{
44+
namespace tensor
45+
{
46+
namespace py_internal
47+
{
48+
49+
namespace td_ns = dpctl::tensor::type_dispatch;
50+
51+
namespace ew_cmn_ns = dpctl::tensor::kernels::elementwise_common;
52+
using ew_cmn_ns::unary_contig_impl_fn_ptr_t;
53+
using ew_cmn_ns::unary_strided_impl_fn_ptr_t;
54+
55+
// U02: ==== ACOS (x)
56+
namespace impl
57+
{
58+
59+
namespace acos_fn_ns = dpctl::tensor::kernels::acos;
60+
61+
static unary_contig_impl_fn_ptr_t acos_contig_dispatch_vector[td_ns::num_types];
62+
static int acos_output_typeid_vector[td_ns::num_types];
63+
static unary_strided_impl_fn_ptr_t
64+
acos_strided_dispatch_vector[td_ns::num_types];
65+
66+
void populate_acos_dispatch_vectors(void)
67+
{
68+
using namespace td_ns;
69+
namespace fn_ns = acos_fn_ns;
70+
71+
using fn_ns::AcosContigFactory;
72+
DispatchVectorBuilder<unary_contig_impl_fn_ptr_t, AcosContigFactory,
73+
num_types>
74+
dvb1;
75+
dvb1.populate_dispatch_vector(acos_contig_dispatch_vector);
76+
77+
using fn_ns::AcosStridedFactory;
78+
DispatchVectorBuilder<unary_strided_impl_fn_ptr_t, AcosStridedFactory,
79+
num_types>
80+
dvb2;
81+
dvb2.populate_dispatch_vector(acos_strided_dispatch_vector);
82+
83+
using fn_ns::AcosTypeMapFactory;
84+
DispatchVectorBuilder<int, AcosTypeMapFactory, num_types> dvb3;
85+
dvb3.populate_dispatch_vector(acos_output_typeid_vector);
86+
};
87+
88+
} // namespace impl
89+
90+
void init_acos(py::module_ m)
91+
{
92+
using arrayT = dpctl::tensor::usm_ndarray;
93+
using event_vecT = std::vector<sycl::event>;
94+
{
95+
impl::populate_acos_dispatch_vectors();
96+
using impl::acos_contig_dispatch_vector;
97+
using impl::acos_output_typeid_vector;
98+
using impl::acos_strided_dispatch_vector;
99+
100+
auto acos_pyapi = [&](const arrayT &src, const arrayT &dst,
101+
sycl::queue &exec_q,
102+
const event_vecT &depends = {}) {
103+
return py_unary_ufunc(
104+
src, dst, exec_q, depends, acos_output_typeid_vector,
105+
acos_contig_dispatch_vector, acos_strided_dispatch_vector);
106+
};
107+
m.def("_acos", acos_pyapi, "", py::arg("src"), py::arg("dst"),
108+
py::arg("sycl_queue"), py::arg("depends") = py::list());
109+
110+
auto acos_result_type_pyapi = [&](const py::dtype &dtype) {
111+
return py_unary_ufunc_result_type(dtype, acos_output_typeid_vector);
112+
};
113+
m.def("_acos_result_type", acos_result_type_pyapi);
114+
}
115+
}
116+
117+
} // namespace py_internal
118+
} // namespace tensor
119+
} // namespace dpctl

0 commit comments

Comments
 (0)