| 97 | } |
| 98 | |
| 99 | void NETileKernel::run(const Window &window, const ThreadInfo &info) |
| 100 | { |
| 101 | ARM_COMPUTE_UNUSED(info); |
| 102 | ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this); |
| 103 | ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(INEKernel::window(), window); |
| 104 | |
| 105 | Window output_window{window}; |
| 106 | output_window.set(Window::DimX, Window::Dimension(output_window.x().start(), output_window.x().end(), |
| 107 | _input->info()->dimension(0))); |
| 108 | Window out_slice = output_window.first_slice_window_1D(); |
| 109 | |
| 110 | const auto src_shape = _input->info()->tensor_shape(); |
| 111 | do |
| 112 | { |
| 113 | Iterator output_it(_output, out_slice); |
| 114 | |
| 115 | execute_window_loop( |
| 116 | out_slice, |
| 117 | [&](const Coordinates &id) |
| 118 | { |
| 119 | const size_t x = id.x(); |
| 120 | const size_t y = id.y(); |
| 121 | const size_t z = id.z(); |
| 122 | const size_t w = id[3]; |
| 123 | Coordinates input_coords{x % src_shape[0], y % src_shape[1], z % src_shape[2], w % src_shape[3]}; |
| 124 | memcpy(output_it.ptr(), _input->ptr_to_element(input_coords), |
| 125 | _input->info()->dimension(0) * _input->info()->element_size()); |
| 126 | }, |
| 127 | output_it); |
| 128 | } while (output_window.slide_window_slice_1D(out_slice)); |
| 129 | } |
| 130 | } // namespace arm_compute |
nothing calls this directly
no test coverage detected