| 34 | |
| 35 | template<typename T> |
| 36 | Array<T> copyArray(const Array<T> &src) { |
| 37 | Array<T> out = createEmptyArray<T>(src.dims()); |
| 38 | if (src.elements() > 0) { |
| 39 | if (src.isReady()) { |
| 40 | if (src.isLinear()) { |
| 41 | getQueue().enqueueCopyBuffer( |
| 42 | *src.get(), *out.get(), src.getOffset() * sizeof(T), 0, |
| 43 | src.elements() * sizeof(T), nullptr, nullptr); |
| 44 | } else { |
| 45 | kernel::memcopy<T>(*out.get(), out.strides(), *src.get(), |
| 46 | src.dims(), src.strides(), src.getOffset(), |
| 47 | src.ndims()); |
| 48 | } |
| 49 | } else { |
| 50 | Param info = {out.get(), |
| 51 | {{src.dims().dims[0], src.dims().dims[1], |
| 52 | src.dims().dims[2], src.dims().dims[3]}, |
| 53 | {out.strides().dims[0], out.strides().dims[1], |
| 54 | out.strides().dims[2], out.strides().dims[3]}, |
| 55 | 0}}; |
| 56 | evalNodes(info, src.getNode().get()); |
| 57 | } |
| 58 | } |
| 59 | return out; |
| 60 | } |
| 61 | |
| 62 | template<typename T> |
| 63 | void multiply_inplace(Array<T> &src, double norm) { |
no test coverage detected