| 30 | |
| 31 | template<typename T> |
| 32 | void copyData(T *data, const Array<T> &src) { |
| 33 | if (src.elements() > 0) { |
| 34 | Array<T> lin = src.isReady() && src.isLinear() ? src : copyArray(src); |
| 35 | size_t elements = lin.elements(); |
| 36 | Param<T> p = lin; |
| 37 | getQueue() |
| 38 | .submit([&](sycl::handler &h) { |
| 39 | sycl::range rr(elements); |
| 40 | sycl::id offset_id(p.info.offset); |
| 41 | auto offset_acc = |
| 42 | p.data->template get_access<sycl::access_mode::read_write>( |
| 43 | h, rr, offset_id); |
| 44 | h.copy(offset_acc, data); |
| 45 | }) |
| 46 | .wait(); |
| 47 | } |
| 48 | } |
| 49 | |
| 50 | template<typename T> |
| 51 | Array<T> copyArray(const Array<T> &A) { |