File tree Expand file tree Collapse file tree 1 file changed +15
-0
lines changed
dpctl/tensor/libtensor/source Expand file tree Collapse file tree 1 file changed +15
-0
lines changed Original file line number Diff line number Diff line change @@ -2023,6 +2023,21 @@ tri(sycl::queue &exec_q,
2023
2023
return std::make_pair (sycl::event (), sycl::event ());
2024
2024
}
2025
2025
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
+
2026
2041
int src_typenum = src.get_typenum ();
2027
2042
int dst_typenum = dst.get_typenum ();
2028
2043
int src_typeid = array_types.typenum_to_lookup_id (src_typenum);
You can’t perform that action at this time.
0 commit comments