23.11
|
Go to the documentation of this file.
42 : _memory_group(std::move(memory_manager)),
47 _is_reshape_required(false)
58 "Reduction axis greater than max number of dimensions");
61 const bool is_reshape_required = !keep_dims;
63 if (is_reshape_required && output->
total_size() != 0)
65 const TensorInfo expected_output_shape = output->
clone()->set_tensor_shape(
70 auto *output_internal = output;
74 const auto input_num_channles =
input->num_channels();
75 const auto input_qinfo =
input->quantization_info();
76 const auto output_data_type = output->
data_type();
83 if (is_reshape_required)
86 shape_before_reshape.
set(axis, 1);
87 initialize_tensorinfo(output_before_reshape, shape_before_reshape, output_data_type, input_num_channles,
89 output_internal = &output_before_reshape;
94 if (is_reshape_required)
104 if (!_is_reshape_required)
110 shape.set(_reduction_axis, 1);
112 return &_unreshaped_output;
130 _reduction_axis = axis;
131 _is_reshape_required = !keep_dims;
133 auto *output_internal = configure_intermediate_result_vector(
input, output);
135 if (_is_reshape_required)
139 const auto output_data_type =
input->info()->data_type();
143 .set_data_type(output_data_type)
145 .set_is_resizable(
true));
147 _memory_group.
manage(&_unreshaped_output);
150 _reduction_kernel = std::make_unique<CLReductionOperationKernel>();
151 _reduction_kernel->configure(compile_context,
input, output_internal, axis, op);
153 if (_is_reshape_required)
155 _reshape.
configure(compile_context, &_unreshaped_output, output);
166 if (_is_reshape_required)
void manage(IMemoryManageable *obj) override
Sets a object to be managed by the given memory group.
CLReductionOperation(std::shared_ptr< IMemoryManager > memory_manager=nullptr)
Default Constructor.
~CLReductionOperation()
Default Destructor.
Quantization information.
virtual ITensorInfo & set_num_channels(int num_channels)=0
Set the number of channels to the specified value.
void enqueue(ICLKernel &kernel, bool flush=true)
Schedule the execution of the passed kernel if possible.
void init(const TensorInfo &input, size_t alignment=0)
Initialize a tensor based on the passed TensorInfo.
#define ARM_COMPUTE_RETURN_ERROR_ON_MISMATCHING_SHAPES(...)
virtual ITensorInfo & set_tensor_shape(const TensorShape &shape)=0
Set the shape of an already initialized tensor.
Interface for OpenCL tensor.
ITensorInfo & set_data_type(DataType data_type) override
Set the data type to the specified value.
ReductionOperation
Available reduction operations.
void run() override
Run the kernels contained in the function.
static CLKernelLibrary & get()
Access the KernelLibrary singleton.
#define ARM_COMPUTE_RETURN_ON_ERROR(status)
Checks if a status contains an error and returns it.
static Status validate(const ITensorInfo *input, const ITensorInfo *output, unsigned int axis, ReductionOperation op)
Static function to check if given info will lead to a valid configuration of CLReductionOperationKern...
#define ARM_COMPUTE_ERROR_ON_NULLPTR(...)
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor's metadata.
void run() override
Run the kernels contained in the function.
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...
Interface to enqueue OpenCL kernels and get/set the OpenCL CommandQueue and ICLTuner.
virtual DataType data_type() const =0
Data type used for each element of the tensor.
TensorShape compute_reduced_shape(const TensorShape &input, unsigned int axis, bool keep_dims=true)
Calculate the reduced shape of a tensor given an axis.
void allocate() override
Allocate size specified by TensorInfo of OpenCL memory.
CLTensorAllocator * allocator()
Return a pointer to the tensor's allocator.
static CLScheduler & get()
Access the scheduler singleton.
TensorShape input_shape
Validate test suite is to test ARM_COMPUTE_RETURN_ON_* macros we use to check the validity of given a...
virtual std::unique_ptr< T > clone() const =0
Provide a clone of the current object of class T.
Store the tensor's metadata.
#define ARM_COMPUTE_RETURN_ERROR_ON_MSG(cond, msg)
If the condition is true, an error is returned.
Memory group resources scope handling class.
Copyright (c) 2017-2023 Arm Limited.
void configure(ICLTensor *input, ICLTensor *output, unsigned int axis, ReductionOperation op, bool keep_dims=true)
Set the input and output tensors.
Store the tensor's metadata.
TensorShape & set(size_t dimension, size_t value, bool apply_dim_correction=true, bool increase_dim_unit=true)
Accessor to set the value of one of the dimensions.
void configure(const ICLTensor *input, ICLTensor *output)
Initialise the kernel's inputs and outputs.
#define ARM_COMPUTE_LOG_PARAMS(...)
static Status validate(const ITensorInfo *input, const ITensorInfo *output, unsigned int axis, ReductionOperation op, bool keep_dims=true)
Static function to check if given info will lead to a valid configuration of CLReductionOperation.
virtual size_t total_size() const =0
Returns the total size of the tensor in bytes.
DataType
Available data types.
static constexpr size_t num_max_dimensions
Number of dimensions the tensor has.
const QuantizationInfo qinfo
virtual ITensorInfo & set_quantization_info(const QuantizationInfo &quantization_info)=0
Set the quantization settings (scale and offset) of the tensor.
static Status validate(const ITensorInfo *input, const ITensorInfo *output)
Static function to check if given info will lead to a valid configuration of CLReshapeLayer.