| 182 | } |
| 183 | |
| 184 | void ClWidthConcatenate4TensorsKernel::run_op(ITensorPack &tensors, const Window &window, ::cl::CommandQueue &queue) |
| 185 | { |
| 186 | ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this); |
| 187 | ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(ICLKernel::window(), window); |
| 188 | |
| 189 | const auto src0 = |
| 190 | utils::cast::polymorphic_downcast<const ICLTensor *>(tensors.get_const_tensor(TensorType::ACL_SRC_VEC)); |
| 191 | const auto src1 = |
| 192 | utils::cast::polymorphic_downcast<const ICLTensor *>(tensors.get_const_tensor(TensorType::ACL_SRC_VEC + 1)); |
| 193 | const auto src2 = |
| 194 | utils::cast::polymorphic_downcast<const ICLTensor *>(tensors.get_const_tensor(TensorType::ACL_SRC_VEC + 2)); |
| 195 | const auto src3 = |
| 196 | utils::cast::polymorphic_downcast<const ICLTensor *>(tensors.get_const_tensor(TensorType::ACL_SRC_VEC + 3)); |
| 197 | auto dst = utils::cast::polymorphic_downcast<ICLTensor *>(tensors.get_tensor(TensorType::ACL_DST)); |
| 198 | |
| 199 | Window slice = window.first_slice_window_4D(); |
| 200 | |
| 201 | do |
| 202 | { |
| 203 | unsigned int idx = 0; |
| 204 | add_4D_tensor_argument(idx, src0, slice); |
| 205 | add_4D_tensor_argument(idx, src1, slice); |
| 206 | add_4D_tensor_argument(idx, src2, slice); |
| 207 | add_4D_tensor_argument(idx, src3, slice); |
| 208 | add_4D_tensor_argument(idx, dst, slice); |
| 209 | _kernel.setArg<cl_int>(idx++, _depth); |
| 210 | _kernel.setArg<cl_int>(idx++, _input1_width); |
| 211 | _kernel.setArg<cl_int>(idx++, _input2_width); |
| 212 | _kernel.setArg<cl_int>(idx++, _input3_width); |
| 213 | enqueue(queue, *this, window, lws_hint()); |
| 214 | } while (window.slide_window_slice_4D(slice)); |
| 215 | } |
| 216 | } // namespace kernels |
| 217 | } // namespace opencl |
| 218 | } // namespace arm_compute |
nothing calls this directly
no test coverage detected