ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
onert::backend::cpu::ops::TransposeLayer Class Reference

#include <TransposeLayer.h>

Collaboration diagram for onert::backend::cpu::ops::TransposeLayer:

Public Member Functions

 TransposeLayer ()
 
template<typename T >
void transpose ()
 
void transposeQuant8 ()
 
void configure (const IPortableTensor *input, const IPortableTensor *perm, IPortableTensor *output)
 
void run () override
 
- Public Member Functions inherited from onert::exec::IFunction
virtual ~IFunction ()=default
 
virtual void prepare ()
 

Detailed Description

Definition at line 27 of file TransposeLayer.h.

Constructor & Destructor Documentation

◆ TransposeLayer()

onert::backend::cpu::ops::TransposeLayer::TransposeLayer ( )

Definition at line 27 of file TransposeLayer.cc.

27 : _input(nullptr), _perm(nullptr), _output(nullptr)
28{
29 // DO NOTHING
30}

Member Function Documentation

◆ configure()

void onert::backend::cpu::ops::TransposeLayer::configure ( const IPortableTensor input,
const IPortableTensor perm,
IPortableTensor output 
)

Definition at line 74 of file TransposeLayer.cc.

76{
77 _input = input;
78 _perm = perm;
79 _output = output;
80}

◆ run()

void onert::backend::cpu::ops::TransposeLayer::run ( )
overridevirtual

Implements onert::exec::IFunction.

Definition at line 82 of file TransposeLayer.cc.

83{
84 if (_input->data_type() == OperandType::FLOAT32)
85 {
86 transpose<float>();
87 }
88 else if (_input->data_type() == OperandType::INT32)
89 {
90 transpose<int32_t>();
91 }
92 else if (_input->data_type() == OperandType::QUANT_UINT8_ASYMM)
93 {
95 }
96 else
97 {
98 throw std::runtime_error{"Transpose: unsupported data type"};
99 }
100}
ir::DataType data_type() const override final

References onert::backend::IPortableTensor::data_type(), and transposeQuant8().

◆ transpose()

template<typename T >
void onert::backend::cpu::ops::TransposeLayer::transpose ( )

Definition at line 32 of file TransposeLayer.cc.

33{
35 auto perm_shape = _perm->getShape();
36 assert(perm_shape.rank() == 1);
37
38 param.perm_count = _input->getShape().rank();
39 if (perm_shape.dim(0) == 0) // This means _perm is (n-1...0)
40 {
41 const auto begin = param.perm;
42 const auto end = param.perm + _input->getShape().rank();
43 std::iota(begin, end, 0);
44 std::reverse(begin, end);
45 }
46 else
47 {
48 assert(param.perm_count == static_cast<int>(perm_shape.dim(0)));
49 for (auto i = 0; i < param.perm_count; i++)
50 {
51 param.perm[i] = *(getBuffer<int32_t>(_perm) + i);
52 }
53 }
54
55 nnfw::cker::Transpose(param, getShape(_input), getBuffer<T>(_input), getShape(_output),
56 getBuffer<T>(_output));
57}
ir::Shape getShape() const override final
Get ir::Shape of tensor.
ShapeIterator end(const Shape &s)
void Transpose(const TransposeParams &unshrunk_params, const Shape &unshrunk_input_shape, const T *input_data, const Shape &unshrunk_output_shape, T *output_data)
Definition Transpose.h:512
nnfw::cker::Shape getShape(const IPortableTensor *tensor)
int32_t begin[5]
Definition Slice.cpp:33

References begin, onert::backend::IPortableTensor::getShape(), onert::backend::cpu::ops::getShape(), nnfw::cker::TransposeParams::perm, nnfw::cker::TransposeParams::perm_count, and nnfw::cker::Transpose().

◆ transposeQuant8()

void onert::backend::cpu::ops::TransposeLayer::transposeQuant8 ( )

Definition at line 59 of file TransposeLayer.cc.

60{
61 if (_input->data_zero_point() != _output->data_zero_point())
62 {
63 throw std::runtime_error("TransposeLayer : qassym8 input and output offsets unmatched");
64 }
65
66 if (_input->data_scale() != _output->data_scale())
67 {
68 throw std::runtime_error("TransposeLayer : qassym8 input and output scales unmatched");
69 }
70
71 transpose<uint8_t>();
72}
float data_scale() const override final
int32_t data_zero_point() const override final

References onert::backend::IPortableTensor::data_scale(), and onert::backend::IPortableTensor::data_zero_point().

Referenced by run().


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