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

#include <AclConstantInitializer.h>

Collaboration diagram for onert::backend::acl_common::AclConstantInitializer:

Public Types

using Initializer = std::function< void(const ir::Operand &, backend::ITensor &)>
 

Public Member Functions

void run ()
 
 AclConstantInitializer (const ir::Operands &operands, const std::shared_ptr< ITensorRegistry > &tensor_reg)
 
void registerDefaultInitializer (const ir::OperandIndex &index, const ir::Operand &obj)
 
void registerCopyInitializer (const ir::OperandIndex &index, const ir::Operand &obj)
 
bool exist (const ir::OperandIndex &ind)
 
void visit (const ir::operation::BatchToSpaceND &) override
 
void visit (const ir::operation::Conv2D &) override
 
void visit (const ir::operation::DepthwiseConv2D &) override
 
void visit (const ir::operation::FullyConnected &) override
 
void visit (const ir::operation::LSTM &) override
 
void visit (const ir::operation::RNN &) override
 
void visit (const ir::operation::TransposeConv &) override
 
- Public Member Functions inherited from onert::ir::OperationVisitor
virtual ~OperationVisitor ()=default
 

Protected Member Functions

void copyInputInitialize (const ir::Operation &node, uint32_t index)
 

Protected Attributes

const ir::Operands_operands
 
std::shared_ptr< ITensorRegistry_tensor_reg
 
std::unordered_map< ir::OperandIndex, Initializer_init_map
 

Detailed Description

Definition at line 145 of file AclConstantInitializer.h.

Member Typedef Documentation

◆ Initializer

Constructor & Destructor Documentation

◆ AclConstantInitializer()

onert::backend::acl_common::AclConstantInitializer::AclConstantInitializer ( const ir::Operands operands,
const std::shared_ptr< ITensorRegistry > &  tensor_reg 
)

Definition at line 22 of file AclConstantInitializer.cc.

24 : _operands{operands}, _tensor_reg{tensor_reg}
25{
26 // DO NOTHING
27}

Member Function Documentation

◆ copyInputInitialize()

void onert::backend::acl_common::AclConstantInitializer::copyInputInitialize ( const ir::Operation node,
uint32_t  index 
)
protected

Definition at line 29 of file AclConstantInitializer.cc.

30{
31 assert(node.getInputs().size() > index);
32
33 const auto &input_index = node.getInputs().at(index);
34 if (input_index.valid())
35 {
36 const auto &input_obj = _operands.at(input_index);
37 registerCopyInitializer(input_index, input_obj);
38 }
39}
void registerCopyInitializer(const ir::OperandIndex &index, const ir::Operand &obj)
const Object & at(const Index &index) const
Get the object that is associated with the given index.

References _operands, onert::util::ObjectManager< Index, Object >::at(), onert::ir::OperandIndexSequence::at(), onert::ir::Operation::getInputs(), registerCopyInitializer(), and onert::ir::OperandIndexSequence::size().

Referenced by visit(), visit(), onert::backend::acl_cl::ConstantInitializer::visit(), visit(), onert::backend::acl_cl::ConstantInitializer::visit(), onert::backend::acl_cl::ConstantInitializer::visit(), visit(), visit(), and visit().

◆ exist()

bool onert::backend::acl_common::AclConstantInitializer::exist ( const ir::OperandIndex ind)
inline

Definition at line 177 of file AclConstantInitializer.h.

177{ return _init_map.find(ind) != _init_map.end(); }
std::unordered_map< ir::OperandIndex, Initializer > _init_map

References _init_map.

◆ registerCopyInitializer()

void onert::backend::acl_common::AclConstantInitializer::registerCopyInitializer ( const ir::OperandIndex index,
const ir::Operand obj 
)

Definition at line 119 of file AclConstantInitializer.cc.

121{
122 // For only CONSTANTS
123 // TODO Add to check if tensor has been allocated
124 if (!obj.isConstant())
125 return;
126
127 const auto type = obj.typeInfo().type();
128 using ir::DataType;
129
130 switch (type)
131 {
132 case DataType::FLOAT32:
133 _init_map[index] = copyInit<float>;
134 break;
135 case DataType::INT32:
136 _init_map[index] = copyInit<int32_t>;
137 break;
138 case DataType::UINT32:
139 _init_map[index] = copyInit<uint32_t>;
140 break;
141 case DataType::BOOL8:
142 case DataType::QUANT_UINT8_ASYMM:
143 _init_map[index] = copyInit<uint8_t>;
144 break;
145 case DataType::QUANT_INT8_SYMM:
146 case DataType::QUANT_INT8_ASYMM:
147 _init_map[index] = copyInit<int8_t>;
148 break;
149 case DataType::FLOAT16:
150 _init_map[index] = copyInit<float16>;
151 break;
152 case DataType::INT64:
153 _init_map[index] = copyInit<int64_t>;
154 break;
155 default:
156 throw std::runtime_error("Not supported, yet");
157 break;
158 }
159}
type
Definition infer.py:18
loco::GraphInputIndex index(const TFPlaceholder *node)
Definition TFNode.cpp:54

References _init_map.

Referenced by copyInputInitialize(), and registerDefaultInitializer().

◆ registerDefaultInitializer()

void onert::backend::acl_common::AclConstantInitializer::registerDefaultInitializer ( const ir::OperandIndex index,
const ir::Operand obj 
)
inline

Definition at line 170 of file AclConstantInitializer.h.

171 {
172 registerCopyInitializer(index, obj);
173 }

References registerCopyInitializer().

◆ run()

void onert::backend::acl_common::AclConstantInitializer::run ( )
inline

Definition at line 148 of file AclConstantInitializer.h.

149 {
150 assert(_tensor_reg);
151 for (const auto &[ind, fn] : _init_map)
152 {
153 const auto &model_obj = _operands.at(ind);
154 auto tensor_obj = _tensor_reg->getNativeITensor(ind);
155 assert(tensor_obj != nullptr);
156 fn(model_obj, *tensor_obj);
157 VERBOSE(FillOperandData) << "Fill data for operand " << ind << std::endl;
158 }
159 _init_map.clear();
160 }
#define VERBOSE(name, lv)
Definition Log.h:71

References _init_map, _operands, _tensor_reg, onert::util::ObjectManager< Index, Object >::at(), and VERBOSE.

◆ visit() [1/7]

void onert::backend::acl_common::AclConstantInitializer::visit ( const ir::operation::BatchToSpaceND node)
override

Definition at line 41 of file AclConstantInitializer.cc.

42{
43 const auto &block_size_index = node.getInputs().at(ir::operation::BatchToSpaceND::BLOCK_SIZE);
44 const auto &block_size_obj = _operands.at(block_size_index);
45
46 if (block_size_obj.isConstant())
47 {
48 _init_map[block_size_index] = [](const ir::Operand &model_obj, backend::ITensor &obj) {
49 assert(model_obj.data());
50 const auto &shape = model_obj.shape();
51 const auto base = reinterpret_cast<const int32_t *>(model_obj.data()->base());
52 assert(model_obj.shape().rank() == 1);
53 obj.access([&](ITensor &tensor) {
54 for (size_t i = 0; i < shape.num_elements(); ++i)
55 {
56 const int32_t value = base[shape.num_elements() - i - 1];
57 int32_t *into = reinterpret_cast<int32_t *>(tensor.buffer() +
58 tensor.calcOffset({static_cast<int32_t>(i)}));
59 *into = value;
60 }
61 });
62 };
63 }
64}

References _init_map, _operands, onert::util::ObjectManager< Index, Object >::at(), onert::ir::OperandIndexSequence::at(), onert::ir::operation::BatchToSpaceND::BLOCK_SIZE, onert::ir::Operand::data(), onert::ir::Operation::getInputs(), and onert::ir::Operand::shape().

◆ visit() [2/7]

void onert::backend::acl_common::AclConstantInitializer::visit ( const ir::operation::Conv2D node)
override

◆ visit() [3/7]

◆ visit() [4/7]

◆ visit() [5/7]

void onert::backend::acl_common::AclConstantInitializer::visit ( const ir::operation::LSTM node)
override

Definition at line 84 of file AclConstantInitializer.cc.

85{
102}

References onert::ir::operation::LSTM::CELL_TO_FORGET_WEIGHTS, onert::ir::operation::LSTM::CELL_TO_INPUT_WEIGHTS, onert::ir::operation::LSTM::CELL_TO_OUTPUT_WEIGHTS, copyInputInitialize(), onert::ir::operation::LSTM::FORGET_GATE_BIAS, onert::ir::operation::LSTM::INPUT_GATE_BIAS, onert::ir::operation::LSTM::INPUT_TO_CELL_WEIGHTS, onert::ir::operation::LSTM::INPUT_TO_FORGET_WEIGHTS, onert::ir::operation::LSTM::INPUT_TO_INPUT_WEIGHTS, onert::ir::operation::LSTM::INPUT_TO_OUTPUT_WEIGHTS, onert::ir::operation::LSTM::OUTPUT_GATE_BIAS, onert::ir::operation::LSTM::PROJECTION_BIAS, onert::ir::operation::LSTM::PROJECTION_WEIGHTS, onert::ir::operation::LSTM::RECURRENT_TO_CELL_WEIGHTS, onert::ir::operation::LSTM::RECURRENT_TO_FORGET_WEIGHTS, onert::ir::operation::LSTM::RECURRENT_TO_INPUT_WEIGHTS, and onert::ir::operation::LSTM::RECURRENT_TO_OUTPUT_WEIGHTS.

◆ visit() [6/7]

◆ visit() [7/7]

void onert::backend::acl_common::AclConstantInitializer::visit ( const ir::operation::TransposeConv node)
override

Field Documentation

◆ _init_map

◆ _operands

◆ _tensor_reg

std::shared_ptr<ITensorRegistry> onert::backend::acl_common::AclConstantInitializer::_tensor_reg
protected

Definition at line 193 of file AclConstantInitializer.h.

Referenced by run().


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