MCPcopy Create free account
hub / github.com/ARM-software/ComputeLibrary / run

Method run

src/core/CL/kernels/CLReductionOperationKernel.cpp:237–379  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

235}
236
237void CLReductionOperationKernel::run(const Window &window, cl::CommandQueue &queue)
238{
239 ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(this);
240 ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(IKernel::window(), window);
241
242 const bool is_serial_op = needs_serialized_reduction(_op, _input->info()->data_type(), _reduction_axis);
243 switch (_reduction_axis)
244 {
245 case 0:
246 {
247 // We use parallel reduction only in non quantized types
248 if (is_serial_op)
249 {
250 // Get first input and output slices
251 Window window_in{window};
252 window_in.set(Window::DimX,
253 Window::Dimension(0, _input->info()->dimension(0), _input->info()->dimension(0)));
254
255 Window out_window{window};
256 out_window.set(Window::DimX, Window::Dimension(0, 0, 0));
257
258 Window in_slice = window_in.first_slice_window_1D();
259 Window out_slice = out_window.first_slice_window_1D();
260
261 do
262 {
263 unsigned int idx = 0;
264 add_1D_tensor_argument(idx, _input, in_slice);
265 add_1D_tensor_argument(idx, _output, out_slice);
266 enqueue(queue, *this, in_slice);
267 } while (window_in.slide_window_slice_1D(in_slice) && out_window.slide_window_slice_1D(out_slice));
268 }
269 else
270 {
271 // Set out window
272 bool has_collapsed = true;
273 Window window_in = window.collapse_if_possible(window, 2, &has_collapsed);
274 ARM_COMPUTE_ERROR_ON(!has_collapsed);
275
276 Window window_out = window_in;
277 window_out.set(0, Window::Dimension());
278
279 unsigned int idx = 0;
280 add_3D_tensor_argument(idx, _input, window_in);
281 add_3D_tensor_argument(idx, _output, window_out);
282 enqueue(queue, *this, window_in);
283 }
284 }
285 break;
286 case 1:
287 {
288 bool has_collapsed = true;
289 Window actual_window = window.collapse_if_possible(window, 2, &has_collapsed);
290 ARM_COMPUTE_ERROR_ON(!has_collapsed);
291
292 actual_window = actual_window.shift_dimensions(1, Window::DimY);
293
294 const ITensorInfo *input_info = _input->info();

Callers

nothing calls this directly

Calls 11

first_slice_window_1DMethod · 0.80
slide_window_slice_1DMethod · 0.80
collapse_if_possibleMethod · 0.80
setArgMethod · 0.80
DimensionClass · 0.50
data_typeMethod · 0.45
infoMethod · 0.45
setMethod · 0.45
dimensionMethod · 0.45

Tested by

no test coverage detected