ONE - On-device Neural Engine
Loading...
Searching...
No Matches
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 53 of file TransposeLayer.cc.

53 : _input(nullptr), _perm(nullptr), _output(nullptr)
54{
55 // DO NOTHING
56}

Member Function Documentation

◆ configure()

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

Definition at line 100 of file TransposeLayer.cc.

102{
103 _input = input;
104 _perm = perm;
105 _output = output;
106}

◆ run()

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

Implements onert::exec::IFunction.

Definition at line 108 of file TransposeLayer.cc.

109{
110 if (_input->data_type() == OperandType::FLOAT32)
111 {
112 transpose<float>();
113 }
114 else if (_input->data_type() == OperandType::INT32)
115 {
116 transpose<int32_t>();
117 }
118 else if (_input->data_type() == OperandType::QUANT_UINT8_ASYMM)
119 {
121 }
122 else
123 {
124 throw std::runtime_error{"Transpose: unsupported data type"};
125 }
126}
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 58 of file TransposeLayer.cc.

59{
61 auto perm_shape = _perm->getShape();
62 assert(perm_shape.rank() == 1);
63
64 param.perm_count = _input->getShape().rank();
65 if (perm_shape.dim(0) == 0) // This means _perm is (n-1...0)
66 {
67 const auto begin = param.perm;
68 const auto end = param.perm + _input->getShape().rank();
69 std::iota(begin, end, 0);
70 std::reverse(begin, end);
71 }
72 else
73 {
74 assert(param.perm_count == static_cast<int>(perm_shape.dim(0)));
75 for (auto i = 0; i < param.perm_count; i++)
76 {
77 param.perm[i] = *(getBuffer<int32_t>(_perm) + i);
78 }
79 }
80
81 nnfw::cker::Transpose(param, getShape(_input), getBuffer<T>(_input), getShape(_output),
82 getBuffer<T>(_output));
83}
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 85 of file TransposeLayer.cc.

86{
87 if (_input->data_zero_point() != _output->data_zero_point())
88 {
89 throw std::runtime_error("TransposeLayer : qassym8 input and output offsets unmatched");
90 }
91
92 if (_input->data_scale() != _output->data_scale())
93 {
94 throw std::runtime_error("TransposeLayer : qassym8 input and output scales unmatched");
95 }
96
97 transpose<uint8_t>();
98}
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: