Skip to content

Commit d660147

Browse files
committed
Added memory overlap check
1 parent ef5f615 commit d660147

File tree

1 file changed

+15
-0
lines changed

1 file changed

+15
-0
lines changed

dpctl/tensor/libtensor/source/tensor_py.cpp

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2023,6 +2023,21 @@ tri(sycl::queue &exec_q,
20232023
return std::make_pair(sycl::event(), sycl::event());
20242024
}
20252025

2026+
// check that arrays do not overlap, and concurrent copying is safe.
2027+
auto src_offsets = src.get_minmax_offsets();
2028+
int src_elem_size = src.get_elemsize();
2029+
int dst_elem_size = dst.get_elemsize();
2030+
2031+
bool memory_overlap =
2032+
((dst_data - src_data > src_offsets.second * src_elem_size -
2033+
dst_offsets.first * dst_elem_size) &&
2034+
(src_data - dst_data > dst_offsets.second * dst_elem_size -
2035+
src_offsets.first * src_elem_size));
2036+
if (memory_overlap) {
2037+
// TODO: could use a temporary, but this is done by the caller
2038+
throw py::value_error("Arrays index overlapping segments of memory");
2039+
}
2040+
20262041
int src_typenum = src.get_typenum();
20272042
int dst_typenum = dst.get_typenum();
20282043
int src_typeid = array_types.typenum_to_lookup_id(src_typenum);

0 commit comments

Comments
 (0)