40 : _memory_group(std::move(memory_manager)), _results_vector(), _not_reshaped_output(), _reduction_kernels_vector(), _reshape(), _num_of_stages(), _reduction_axis()
58 const auto input_num_channles =
input->num_channels();
59 const auto input_qinfo =
input->quantization_info();
68 auto shape_before_reshape =
input->tensor_shape();
69 shape_before_reshape.set(axis, 1);
75 initialize_tensorinfo(not_reshaped_output, shape_before_reshape, output_data_type, input_num_channles, input_qinfo);
77 if(num_of_stages == 1)
84 std::vector<TensorInfo> sums_vector(num_of_stages - 1);
89 for(
unsigned int i = 0; i < num_of_stages - 1; i++)
92 sums_vector[i].set_data_type(
input->data_type());
93 sums_vector[i].set_tensor_shape(
shape);
94 sums_vector[i].set_num_channels(
input->num_channels());
101 for(
unsigned int i = 1; i < num_of_stages - 1; ++i)
107 const unsigned int last_stage = num_of_stages - 1;
123 _reduction_axis = axis;
130 _reduction_kernels_vector.reserve(_num_of_stages);
134 _reduction_kernels_vector.emplace_back(std::make_unique<CLArgMinMaxLayerKernel>());
135 _reduction_kernels_vector.back()->configure(compile_context,
input, prev_output, output, axis, op);
138 _memory_group.
manage(&_not_reshaped_output);
140 if(_num_of_stages == 1)
142 add_reduction_kernel(
input,
nullptr, &_not_reshaped_output);
146 _results_vector.resize(_num_of_stages - 1);
148 for(
unsigned int i = 0; i < _num_of_stages - 1; i++)
151 _results_vector[i].allocator()->init(
input->info()->clone()->set_tensor_shape(
shape).set_data_type(output_data_type));
155 _memory_group.
manage(&_results_vector[0]);
156 add_reduction_kernel(
input,
nullptr, &_results_vector[0]);
159 for(
unsigned int i = 1; i < _num_of_stages - 1; ++i)
161 _memory_group.
manage(&_results_vector[i]);
162 add_reduction_kernel(
input, &_results_vector[i - 1], &_results_vector[i]);
163 _results_vector[i - 1].allocator()->allocate();
167 const unsigned int last_stage = _num_of_stages - 1;
168 add_reduction_kernel(
input, &_results_vector[last_stage - 1], &_not_reshaped_output);
169 _results_vector[last_stage - 1].allocator()->allocate();
171 _reshape.
configure(compile_context, &_not_reshaped_output, output);
179 for(
unsigned int i = 0; i < _num_of_stages; ++i)
unsigned int calculate_number_of_stages_only_x_axis(size_t input_x_dimension, unsigned int axis)
Calculate number of stages for parallel implementations.
~CLArgMinMaxLayer()
Default destructor.
virtual ITensorInfo & set_num_channels(int num_channels)=0
Set the number of channels to the specified value.
static Status validate(const ITensorInfo *input, const ITensorInfo *output)
Static function to check if given info will lead to a valid configuration of CLReshapeLayer.
#define ARM_COMPUTE_RETURN_ERROR_ON_F16_UNSUPPORTED(tensor)
ReductionOperation
Available reduction operations.
static CLScheduler & get()
Access the scheduler singleton.
void run() override
Run the kernels contained in the function.
virtual ITensorInfo & set_tensor_shape(const TensorShape &shape)=0
Set the shape of an already initialized tensor.
#define ARM_COMPUTE_RETURN_ON_ERROR(status)
Checks if a status contains an error and returns it.
virtual DataType data_type() const =0
Data type used for each element of the tensor.
1 channel, 1 F32 per channel
ITensorInfo & set_data_type(DataType data_type) override
Set the data type to the specified value.
static CLKernelLibrary & get()
Access the KernelLibrary singleton.
Store the tensor's metadata.
CLTensorAllocator * allocator()
Return a pointer to the tensor's allocator.
Copyright (c) 2017-2021 Arm Limited.
1 channel, 1 F16 per channel
void run() override
Run the kernels contained in the function.
static Status validate(const ITensorInfo *input, int axis, const ITensorInfo *output, const ReductionOperation &op)
Static function to check if given info will lead to a valid configuration of CLArgMinMaxLayer.
1 channel, 1 S32 per channel
void manage(IMemoryManageable *obj) override
Sets a object to be managed by the given memory group.
Quantization information.
CLArgMinMaxLayer(std::shared_ptr< IMemoryManager > memory_manager=nullptr)
Default Constructor.
quantized, asymmetric fixed-point 8-bit number unsigned
TensorShape compute_reduced_shape(const TensorShape &input, unsigned int axis, bool keep_dims=true)
Calculate the reduced shape of a tensor given an axis.
bool auto_init_if_empty(ITensorInfo &info, const TensorShape &shape, int num_channels, DataType data_type, QuantizationInfo quantization_info=QuantizationInfo())
Auto initialize the tensor info (shape, number of channels and data type) if the current assignment i...
virtual std::unique_ptr< T > clone() const =0
Provide a clone of the current object of class T.
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor's metadata.
static Status validate(const ITensorInfo *input, const ITensorInfo *prev_output, const ITensorInfo *output, unsigned int axis, ReductionOperation op)
Static function to check if given info will lead to a valid configuration of CLArgMinMaxLayerKernel.
virtual ITensorInfo & set_quantization_info(const QuantizationInfo &quantization_info)=0
Set the quantization settings (scale and offset) of the tensor.
void enqueue(ICLKernel &kernel, bool flush=true)
Schedule the execution of the passed kernel if possible.
void allocate() override
Allocate size specified by TensorInfo of OpenCL memory.
Memory group resources scope handling class.
Interface for OpenCL tensor.
virtual size_t total_size() const =0
Returns the total size of the tensor in bytes.
#define ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_SHAPES(...)
void configure(const ICLTensor *input, int axis, ICLTensor *output, const ReductionOperation &op)
Set the input and output tensors.
const QuantizationInfo qinfo
#define ARM_COMPUTE_RETURN_ERROR_ON_DATA_TYPE_CHANNEL_NOT_IN(t, c,...)
#define ARM_COMPUTE_RETURN_ERROR_ON_MSG(cond, msg)
If the condition is true, an error is returned.
#define ARM_COMPUTE_ERROR_ON_NULLPTR(...)
Store the tensor's metadata.
void configure(const ICLTensor *input, ICLTensor *output)
Initialise the kernel's inputs and outputs.
quantized, asymmetric fixed-point 8-bit number signed
static constexpr size_t num_max_dimensions
Number of dimensions the tensor has.
DataType
Available data types.