Skip to content

Commit 0a11646

Browse files
Avoid unncessary argument copies
This is in response to about 11K instances of COPY_INSTEAD_OF_MOVE issues in Coverity report.
1 parent 33ece78 commit 0a11646

34 files changed

+561
-474
lines changed

dpctl/tensor/libtensor/include/kernels/constructors.hpp

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -57,12 +57,12 @@ using namespace dpctl::tensor::offset_utils;
5757
* @brief Cast pybind11 class managing Python object to specified type `T`.
5858
* @defgroup CtorKernels
5959
*/
60-
template <typename T> T unbox_py_scalar(py::object o)
60+
template <typename T> T unbox_py_scalar(const py::object &o)
6161
{
6262
return py::cast<T>(o);
6363
}
6464

65-
template <> inline sycl::half unbox_py_scalar<sycl::half>(py::object o)
65+
template <> inline sycl::half unbox_py_scalar<sycl::half>(const py::object &o)
6666
{
6767
float tmp = py::cast<float>(o);
6868
return static_cast<sycl::half>(tmp);
@@ -74,8 +74,8 @@ template <> inline sycl::half unbox_py_scalar<sycl::half>(py::object o)
7474
typedef sycl::event (*lin_space_step_fn_ptr_t)(
7575
sycl::queue,
7676
size_t, // num_elements
77-
py::object start,
78-
py::object step,
77+
const py::object &start,
78+
const py::object &step,
7979
char *, // dst_data_ptr
8080
const std::vector<sycl::event> &);
8181

@@ -164,8 +164,8 @@ sycl::event lin_space_step_impl(sycl::queue exec_q,
164164
template <typename Ty>
165165
sycl::event lin_space_step_impl(sycl::queue exec_q,
166166
size_t nelems,
167-
py::object start,
168-
py::object step,
167+
const py::object &start,
168+
const py::object &step,
169169
char *array_data,
170170
const std::vector<sycl::event> &depends)
171171
{
@@ -204,8 +204,8 @@ template <typename fnT, typename Ty> struct LinSpaceStepFactory
204204
typedef sycl::event (*lin_space_affine_fn_ptr_t)(
205205
sycl::queue,
206206
size_t, // num_elements
207-
py::object start,
208-
py::object end,
207+
const py::object &start,
208+
const py::object &end,
209209
bool include_endpoint,
210210
char *, // dst_data_ptr
211211
const std::vector<sycl::event> &);
@@ -335,8 +335,8 @@ sycl::event lin_space_affine_impl(sycl::queue exec_q,
335335
template <typename Ty>
336336
sycl::event lin_space_affine_impl(sycl::queue exec_q,
337337
size_t nelems,
338-
py::object start,
339-
py::object end,
338+
const py::object &start,
339+
const py::object &end,
340340
bool include_endpoint,
341341
char *array_data,
342342
const std::vector<sycl::event> &depends)
@@ -372,7 +372,7 @@ template <typename fnT, typename Ty> struct LinSpaceAffineFactory
372372

373373
typedef sycl::event (*full_contig_fn_ptr_t)(sycl::queue,
374374
size_t,
375-
py::object,
375+
const py::object &,
376376
char *,
377377
const std::vector<sycl::event> &);
378378

@@ -427,7 +427,7 @@ sycl::event full_contig_impl(sycl::queue q,
427427
template <typename dstTy>
428428
sycl::event full_contig_impl(sycl::queue exec_q,
429429
size_t nelems,
430-
py::object py_value,
430+
const py::object &py_value,
431431
char *dst_p,
432432
const std::vector<sycl::event> &depends)
433433
{

dpctl/tensor/libtensor/source/accumulators.cpp

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -97,10 +97,10 @@ void populate_mask_positions_dispatch_vectors(void)
9797
return;
9898
}
9999

100-
size_t py_mask_positions(dpctl::tensor::usm_ndarray mask,
101-
dpctl::tensor::usm_ndarray cumsum,
100+
size_t py_mask_positions(const dpctl::tensor::usm_ndarray &mask,
101+
const dpctl::tensor::usm_ndarray &cumsum,
102102
sycl::queue exec_q,
103-
std::vector<sycl::event> const &depends)
103+
const std::vector<sycl::event> &depends)
104104
{
105105
// cumsum is 1D
106106
if (cumsum.get_ndim() != 1) {
@@ -155,7 +155,8 @@ size_t py_mask_positions(dpctl::tensor::usm_ndarray mask,
155155
? mask_positions_contig_i32_dispatch_vector[mask_typeid]
156156
: mask_positions_contig_i64_dispatch_vector[mask_typeid];
157157

158-
return fn(exec_q, mask_size, mask_data, cumsum_data, depends);
158+
return fn(std::move(exec_q), mask_size, mask_data, cumsum_data,
159+
depends);
159160
}
160161

161162
const py::ssize_t *shape = mask.get_shape_raw();
@@ -233,8 +234,8 @@ void populate_cumsum_1d_dispatch_vectors(void)
233234
return;
234235
}
235236

236-
size_t py_cumsum_1d(dpctl::tensor::usm_ndarray src,
237-
dpctl::tensor::usm_ndarray cumsum,
237+
size_t py_cumsum_1d(const dpctl::tensor::usm_ndarray &src,
238+
const dpctl::tensor::usm_ndarray &cumsum,
238239
sycl::queue exec_q,
239240
std::vector<sycl::event> const &depends)
240241
{
@@ -290,7 +291,7 @@ size_t py_cumsum_1d(dpctl::tensor::usm_ndarray src,
290291
"this cumsum requires integer type, got src_typeid=" +
291292
std::to_string(src_typeid));
292293
}
293-
return fn(exec_q, src_size, src_data, cumsum_data, depends);
294+
return fn(std::move(exec_q), src_size, src_data, cumsum_data, depends);
294295
}
295296

296297
const py::ssize_t *shape = src.get_shape_raw();

dpctl/tensor/libtensor/source/accumulators.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -39,15 +39,15 @@ namespace py_internal
3939

4040
extern void populate_mask_positions_dispatch_vectors(void);
4141

42-
extern size_t py_mask_positions(dpctl::tensor::usm_ndarray mask,
43-
dpctl::tensor::usm_ndarray cumsum,
42+
extern size_t py_mask_positions(const dpctl::tensor::usm_ndarray &mask,
43+
const dpctl::tensor::usm_ndarray &cumsum,
4444
sycl::queue exec_q,
45-
std::vector<sycl::event> const &depends = {});
45+
const std::vector<sycl::event> &depends = {});
4646

4747
extern void populate_cumsum_1d_dispatch_vectors(void);
4848

49-
extern size_t py_cumsum_1d(dpctl::tensor::usm_ndarray src,
50-
dpctl::tensor::usm_ndarray cumsum,
49+
extern size_t py_cumsum_1d(const dpctl::tensor::usm_ndarray &src,
50+
const dpctl::tensor::usm_ndarray &cumsum,
5151
sycl::queue exec_q,
5252
std::vector<sycl::event> const &depends = {});
5353

dpctl/tensor/libtensor/source/boolean_advanced_indexing.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -110,13 +110,13 @@ void populate_masked_extract_dispatch_vectors(void)
110110
}
111111

112112
std::pair<sycl::event, sycl::event>
113-
py_extract(dpctl::tensor::usm_ndarray src,
114-
dpctl::tensor::usm_ndarray cumsum,
113+
py_extract(const dpctl::tensor::usm_ndarray &src,
114+
const dpctl::tensor::usm_ndarray &cumsum,
115115
int axis_start, // axis_start <= mask_i < axis_end
116116
int axis_end,
117117
dpctl::tensor::usm_ndarray dst,
118118
sycl::queue exec_q,
119-
std::vector<sycl::event> const &depends)
119+
const std::vector<sycl::event> &depends)
120120
{
121121
int src_nd = src.get_ndim();
122122
if ((axis_start < 0 || axis_end > src_nd || axis_start >= axis_end)) {
@@ -444,13 +444,13 @@ void populate_masked_place_dispatch_vectors(void)
444444
* ((i > 0) ? cumsum[i-1] + 1 : 1)
445445
*/
446446
std::pair<sycl::event, sycl::event>
447-
py_place(dpctl::tensor::usm_ndarray dst,
448-
dpctl::tensor::usm_ndarray cumsum,
447+
py_place(const dpctl::tensor::usm_ndarray &dst,
448+
const dpctl::tensor::usm_ndarray &cumsum,
449449
int axis_start, // axis_start <= mask_i < axis_end
450450
int axis_end,
451-
dpctl::tensor::usm_ndarray rhs,
451+
const dpctl::tensor::usm_ndarray &rhs,
452452
sycl::queue exec_q,
453-
std::vector<sycl::event> const &depends)
453+
const std::vector<sycl::event> &depends)
454454
{
455455
int dst_nd = dst.get_ndim();
456456
if ((axis_start < 0 || axis_end > dst_nd || axis_start >= axis_end)) {
@@ -712,14 +712,14 @@ py_place(dpctl::tensor::usm_ndarray dst,
712712
// Non-zero
713713

714714
std::pair<sycl::event, sycl::event>
715-
py_nonzero(dpctl::tensor::usm_ndarray
716-
cumsum, // int32/int64 input array, 1D, C-contiguous
717-
dpctl::tensor::usm_ndarray
718-
indexes, // int32/int64 2D output array, C-contiguous
719-
std::vector<py::ssize_t>
720-
mask_shape, // shape of array from which cumsum was computed
715+
py_nonzero(const dpctl::tensor::usm_ndarray
716+
&cumsum, // int32/int64 input array, 1D, C-contiguous
717+
const dpctl::tensor::usm_ndarray
718+
&indexes, // int32/int64 2D output array, C-contiguous
719+
const std::vector<py::ssize_t>
720+
&mask_shape, // shape of array from which cumsum was computed
721721
sycl::queue exec_q,
722-
std::vector<sycl::event> const &depends)
722+
const std::vector<sycl::event> &depends)
723723
{
724724
if (!dpctl::utils::queues_are_compatible(exec_q, {cumsum, indexes})) {
725725
throw py::value_error(

dpctl/tensor/libtensor/source/boolean_advanced_indexing.hpp

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -39,34 +39,36 @@ namespace py_internal
3939
{
4040

4141
extern std::pair<sycl::event, sycl::event>
42-
py_extract(dpctl::tensor::usm_ndarray src,
43-
dpctl::tensor::usm_ndarray cumsum,
42+
py_extract(const dpctl::tensor::usm_ndarray &src,
43+
const dpctl::tensor::usm_ndarray &cumsum,
4444
int axis_start, // axis_start <= mask_i < axis_end
4545
int axis_end,
4646
dpctl::tensor::usm_ndarray dst,
4747
sycl::queue exec_q,
48-
std::vector<sycl::event> const &depends = {});
48+
const std::vector<sycl::event> &depends = {});
4949

5050
extern void populate_masked_extract_dispatch_vectors(void);
5151

5252
extern std::pair<sycl::event, sycl::event>
53-
py_place(dpctl::tensor::usm_ndarray dst,
54-
dpctl::tensor::usm_ndarray cumsum,
53+
py_place(const dpctl::tensor::usm_ndarray &dst,
54+
const dpctl::tensor::usm_ndarray &cumsum,
5555
int axis_start, // axis_start <= mask_i < axis_end
5656
int axis_end,
57-
dpctl::tensor::usm_ndarray rhs,
57+
const dpctl::tensor::usm_ndarray &rhs,
5858
sycl::queue exec_q,
59-
std::vector<sycl::event> const &depends = {});
59+
const std::vector<sycl::event> &depends = {});
6060

6161
extern void populate_masked_place_dispatch_vectors(void);
6262

63-
extern std::pair<sycl::event, sycl::event> py_nonzero(
64-
dpctl::tensor::usm_ndarray cumsum, // int32 input array, 1D, C-contiguous
65-
dpctl::tensor::usm_ndarray indexes, // int32 2D output array, C-contiguous
66-
std::vector<py::ssize_t>
67-
mask_shape, // shape of array from which cumsum was computed
68-
sycl::queue exec_q,
69-
std::vector<sycl::event> const &depends = {});
63+
extern std::pair<sycl::event, sycl::event>
64+
py_nonzero(const dpctl::tensor::usm_ndarray
65+
&cumsum, // int32 input array, 1D, C-contiguous
66+
const dpctl::tensor::usm_ndarray
67+
&indexes, // int32 2D output array, C-contiguous
68+
const std::vector<py::ssize_t>
69+
&mask_shape, // shape of array from which cumsum was computed
70+
sycl::queue exec_q,
71+
const std::vector<sycl::event> &depends = {});
7072

7173
} // namespace py_internal
7274
} // namespace tensor

dpctl/tensor/libtensor/source/boolean_reductions.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -148,11 +148,11 @@ void init_boolean_reduction_functions(py::module_ m)
148148
using impl::all_reduction_axis1_contig_dispatch_vector;
149149
using impl::all_reduction_strided_dispatch_vector;
150150

151-
auto all_pyapi = [&](arrayT src, int trailing_dims_to_reduce,
152-
arrayT dst, sycl::queue exec_q,
151+
auto all_pyapi = [&](const arrayT &src, int trailing_dims_to_reduce,
152+
const arrayT &dst, sycl::queue exec_q,
153153
const event_vecT &depends = {}) {
154154
return py_boolean_reduction(
155-
src, trailing_dims_to_reduce, dst, exec_q, depends,
155+
src, trailing_dims_to_reduce, dst, std::move(exec_q), depends,
156156
all_reduction_axis1_contig_dispatch_vector,
157157
all_reduction_axis0_contig_dispatch_vector,
158158
all_reduction_strided_dispatch_vector);
@@ -169,11 +169,11 @@ void init_boolean_reduction_functions(py::module_ m)
169169
using impl::any_reduction_axis1_contig_dispatch_vector;
170170
using impl::any_reduction_strided_dispatch_vector;
171171

172-
auto any_pyapi = [&](arrayT src, int trailing_dims_to_reduce,
173-
arrayT dst, sycl::queue exec_q,
172+
auto any_pyapi = [&](const arrayT &src, int trailing_dims_to_reduce,
173+
const arrayT &dst, sycl::queue exec_q,
174174
const event_vecT &depends = {}) {
175175
return py_boolean_reduction(
176-
src, trailing_dims_to_reduce, dst, exec_q, depends,
176+
src, trailing_dims_to_reduce, dst, std::move(exec_q), depends,
177177
any_reduction_axis1_contig_dispatch_vector,
178178
any_reduction_axis0_contig_dispatch_vector,
179179
any_reduction_strided_dispatch_vector);

dpctl/tensor/libtensor/source/boolean_reductions.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,9 @@ namespace td_ns = dpctl::tensor::type_dispatch;
4949

5050
template <typename contig_dispatchT, typename strided_dispatchT>
5151
std::pair<sycl::event, sycl::event>
52-
py_boolean_reduction(dpctl::tensor::usm_ndarray src,
52+
py_boolean_reduction(const dpctl::tensor::usm_ndarray &src,
5353
int trailing_dims_to_reduce,
54-
dpctl::tensor::usm_ndarray dst,
54+
const dpctl::tensor::usm_ndarray &dst,
5555
sycl::queue exec_q,
5656
const std::vector<sycl::event> &depends,
5757
const contig_dispatchT &axis1_contig_dispatch_vector,

dpctl/tensor/libtensor/source/copy_and_cast_usm_to_usm.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,8 +67,8 @@ namespace py = pybind11;
6767
using dpctl::utils::keep_args_alive;
6868

6969
std::pair<sycl::event, sycl::event>
70-
copy_usm_ndarray_into_usm_ndarray(dpctl::tensor::usm_ndarray src,
71-
dpctl::tensor::usm_ndarray dst,
70+
copy_usm_ndarray_into_usm_ndarray(const dpctl::tensor::usm_ndarray &src,
71+
const dpctl::tensor::usm_ndarray &dst,
7272
sycl::queue exec_q,
7373
const std::vector<sycl::event> &depends = {})
7474
{

dpctl/tensor/libtensor/source/copy_and_cast_usm_to_usm.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,8 @@ namespace py_internal
3838
{
3939

4040
extern std::pair<sycl::event, sycl::event>
41-
copy_usm_ndarray_into_usm_ndarray(dpctl::tensor::usm_ndarray src,
42-
dpctl::tensor::usm_ndarray dst,
41+
copy_usm_ndarray_into_usm_ndarray(const dpctl::tensor::usm_ndarray &src,
42+
const dpctl::tensor::usm_ndarray &dst,
4343
sycl::queue exec_q,
4444
const std::vector<sycl::event> &depends = {});
4545

dpctl/tensor/libtensor/source/copy_for_reshape.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,8 +58,8 @@ static copy_for_reshape_fn_ptr_t
5858
* dst[np.multi_index(i, dst.shape)] = src[np.multi_index(i, src.shape)]
5959
*/
6060
std::pair<sycl::event, sycl::event>
61-
copy_usm_ndarray_for_reshape(dpctl::tensor::usm_ndarray src,
62-
dpctl::tensor::usm_ndarray dst,
61+
copy_usm_ndarray_for_reshape(const dpctl::tensor::usm_ndarray &src,
62+
const dpctl::tensor::usm_ndarray &dst,
6363
sycl::queue exec_q,
6464
const std::vector<sycl::event> &depends)
6565
{

0 commit comments

Comments
 (0)