Compute Library
 21.02
NECol2ImKernel Class Reference

Neon kernel to perform col2im reshaping. More...

#include <NECol2ImKernel.h>

Collaboration diagram for NECol2ImKernel:
[legend]

Public Member Functions

const char * name () const override
 Name of the kernel. More...
 
 NECol2ImKernel ()
 Default constructor. More...
 
 NECol2ImKernel (const NECol2ImKernel &)=delete
 Prevent instances of this class from being copied (As this class contains pointers) More...
 
NECol2ImKerneloperator= (const NECol2ImKernel &)=delete
 Prevent instances of this class from being copied (As this class contains pointers) More...
 
 NECol2ImKernel (NECol2ImKernel &&)=default
 Allow instances of this class to be moved. More...
 
NECol2ImKerneloperator= (NECol2ImKernel &&)=default
 Allow instances of this class to be moved. More...
 
 ~NECol2ImKernel ()=default
 Default destructor. More...
 
void configure (const ITensor *input, ITensor *output, const Size2D &convolved_dims)
 Set the input and output of the kernel. More...
 
void run (const Window &window, const ThreadInfo &info) override
 Execute the kernel on the passed window. More...
 
- Public Member Functions inherited from ICPPKernel
virtual ~ICPPKernel ()=default
 Default destructor. More...
 
virtual void run_nd (const Window &window, const ThreadInfo &info, const Window &thread_locator)
 legacy compatibility layer for implemantions which do not support thread_locator In these cases we simply narrow the interface down the legacy version More...
 
virtual void run_op (ITensorPack &tensors, const Window &window, const ThreadInfo &info)
 Execute the kernel on the passed window. More...
 
- Public Member Functions inherited from IKernel
 IKernel ()
 Constructor. More...
 
virtual ~IKernel ()=default
 Destructor. More...
 
virtual bool is_parallelisable () const
 Indicates whether or not the kernel is parallelisable. More...
 
virtual BorderSize border_size () const
 The size of the border for that kernel. More...
 
const Windowwindow () const
 The maximum window the kernel can be executed on. More...
 

Static Public Member Functions

static Status validate (const ITensorInfo *input, const ITensorInfo *output, const Size2D &convolved_dims)
 Static function to check if given info will lead to a valid configuration of NECol2ImKernel. More...
 

Detailed Description

Neon kernel to perform col2im reshaping.

Rearranges each matrix column into image blocks. It's the inverse operation of NEIm2ColKernel.

For example, a vector of 9 elements can be reshaped to a block(image) of 3x3:

\[ \left( \begin{array}{ccccccccc} a0 & a1 & a2 & a3 & a4 & a5 & a6 & a7 & a8 \\ \end{array} \right) \rightarrow \left( \begin{array}{ccc} a0 & a1 & a2 \\ a3 & a4 & a5 \\ a6 & a7 & a8 \\ \end{array} \right) \]

Definition at line 53 of file NECol2ImKernel.h.

Constructor & Destructor Documentation

◆ NECol2ImKernel() [1/3]

Default constructor.

Definition at line 104 of file NECol2ImKernel.cpp.

Referenced by NECol2ImKernel::name().

105  : _func(), _input(nullptr), _output(nullptr), _convolved_dims()
106 {
107 }

◆ NECol2ImKernel() [2/3]

NECol2ImKernel ( const NECol2ImKernel )
delete

Prevent instances of this class from being copied (As this class contains pointers)

◆ NECol2ImKernel() [3/3]

NECol2ImKernel ( NECol2ImKernel &&  )
default

Allow instances of this class to be moved.

◆ ~NECol2ImKernel()

~NECol2ImKernel ( )
default

Default destructor.

Referenced by NECol2ImKernel::name().

Member Function Documentation

◆ configure()

void configure ( const ITensor input,
ITensor output,
const Size2D convolved_dims 
)

Set the input and output of the kernel.

Parameters
[in]inputThe input tensor to convert. Data types supported: All
[out]outputThe output tensor. 3 lower dimensions represent a single output [width, height, OFM], while the rest represent batch of outputs. Data types supported: Same as input
[in]convolved_dimsOutput convolved dimensions.

Definition at line 109 of file NECol2ImKernel.cpp.

References ARM_COMPUTE_ERROR, ARM_COMPUTE_ERROR_ON_NULLPTR, ARM_COMPUTE_ERROR_THROW_ON, ITensorInfo::element_size(), ITensor::info(), arm_compute::test::validation::input, and arm_compute::validate_arguments().

Referenced by NECol2ImKernel::name().

110 {
111  ARM_COMPUTE_ERROR_ON_NULLPTR(input, output);
112  ARM_COMPUTE_ERROR_THROW_ON(validate_arguments(input->info(), output->info(), convolved_dims));
113 
114  _input = input;
115  _output = output;
116  _convolved_dims = convolved_dims;
117 
118  switch(input->info()->element_size())
119  {
120  case 1:
121  _func = &NECol2ImKernel::run_col2im<uint8_t>;
122  break;
123  case 2:
124  _func = &NECol2ImKernel::run_col2im<uint16_t>;
125  break;
126  case 4:
127  _func = &NECol2ImKernel::run_col2im<uint32_t>;
128  break;
129  default:
130  ARM_COMPUTE_ERROR("Element size not supported");
131  break;
132  }
133 
134  // Configure kernel window
135  auto win_config = validate_and_configure_window(input->info(), output->info(), convolved_dims);
136  ARM_COMPUTE_ERROR_THROW_ON(win_config.first);
137  INEKernel::configure(win_config.second);
138 }
#define ARM_COMPUTE_ERROR(msg)
Print the given message then throw an std::runtime_error.
Definition: Error.h:352
#define ARM_COMPUTE_ERROR_THROW_ON(status)
Definition: Error.h:455
virtual ITensorInfo * info() const =0
Interface to be implemented by the child class to return the tensor&#39;s metadata.
virtual size_t element_size() const =0
Element size in bytes calculated as data_size() * num_channels()
Status validate_arguments(const ITensorInfo *input, const ITensorInfo *bias, const ITensorInfo *output, const GEMMLowpOutputStageInfo *output_stage)
#define ARM_COMPUTE_ERROR_ON_NULLPTR(...)
Definition: Validate.h:161

◆ name()

const char* name ( ) const
inlineoverridevirtual

◆ operator=() [1/2]

NECol2ImKernel& operator= ( const NECol2ImKernel )
delete

Prevent instances of this class from being copied (As this class contains pointers)

Referenced by NECol2ImKernel::name().

◆ operator=() [2/2]

NECol2ImKernel& operator= ( NECol2ImKernel &&  )
default

Allow instances of this class to be moved.

◆ run()

void run ( const Window window,
const ThreadInfo info 
)
overridevirtual

Execute the kernel on the passed window.

Warning
If is_parallelisable() returns false then the passed window must be equal to window()
Note
The window has to be a region within the window returned by the window() method
The width of the window has to be a multiple of num_elems_processed_per_iteration().
Parameters
[in]windowRegion on which to execute the kernel. (Must be a region of the window returned by window())
[in]infoInfo about executing thread and CPU.

Reimplemented from ICPPKernel.

Definition at line 147 of file NECol2ImKernel.cpp.

References ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW, ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL, ARM_COMPUTE_UNUSED, and IKernel::window().

Referenced by NECol2ImKernel::name().

148 {
149  ARM_COMPUTE_UNUSED(info);
152 
153  (this->*_func)(window);
154 }
const Window & window() const
The maximum window the kernel can be executed on.
Definition: IKernel.cpp:28
#define ARM_COMPUTE_UNUSED(...)
To avoid unused variables warnings.
Definition: Error.h:152
#define ARM_COMPUTE_ERROR_ON_UNCONFIGURED_KERNEL(k)
Definition: Validate.h:941
#define ARM_COMPUTE_ERROR_ON_INVALID_SUBWINDOW(f, s)
Definition: Validate.h:205

◆ validate()

Status validate ( const ITensorInfo input,
const ITensorInfo output,
const Size2D convolved_dims 
)
static

Static function to check if given info will lead to a valid configuration of NECol2ImKernel.

Parameters
[in]inputThe input tensor to convert. Data types supported: All
[in]outputThe output tensor. 3 lower dimensions represent a single output [width, height, OFM], while the rest represent batch of outputs. Data types supported: Same as input
[in]convolved_dimsOutput convolved dimensions.
Returns
a status

Definition at line 140 of file NECol2ImKernel.cpp.

References ARM_COMPUTE_RETURN_ON_ERROR, ICloneable< T >::clone(), and arm_compute::validate_arguments().

Referenced by NECol2ImKernel::name(), and NEGEMMConvolutionLayer::validate().

141 {
142  ARM_COMPUTE_RETURN_ON_ERROR(validate_arguments(input, output, convolved_dims));
143  ARM_COMPUTE_RETURN_ON_ERROR(validate_and_configure_window(input->clone().get(), output->clone().get(), convolved_dims).first);
144  return Status{};
145 }
#define ARM_COMPUTE_RETURN_ON_ERROR(status)
Checks if a status contains an error and returns it.
Definition: Error.h:204
Status class.
Definition: Error.h:52
virtual std::unique_ptr< T > clone() const =0
Provide a clone of the current object of class T.
Status validate_arguments(const ITensorInfo *input, const ITensorInfo *bias, const ITensorInfo *output, const GEMMLowpOutputStageInfo *output_stage)

The documentation for this class was generated from the following files: