ONE - On-device Neural Engine
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
onert::exec::IPermuteFunction Class Referenceabstract

#include <IPermuteFunction.h>

Collaboration diagram for onert::exec::IPermuteFunction:

Public Member Functions

virtual void run () override
 
virtual void prepare () override
 
virtual void optimize ()=0
 
- Public Member Functions inherited from onert::exec::IFunction
virtual ~IFunction ()=default
 

Protected Member Functions

void permute (backend::ITensor *src_tensor, backend::ITensor *dst_tensor, size_t rank, std::vector< size_t > &src_offsets, std::vector< size_t > &dst_offsets, const ir::PermuteType &permute_type)
 
const std::type_info & underlying_type (ir::DataType type) const
 

Protected Attributes

std::vector< backend::ITensor * > _src_tensors
 
std::vector< backend::ITensor * > _dst_tensors
 
std::vector< std::vector< size_t > > _src_tensors_offsets
 
std::vector< std::vector< size_t > > _dst_tensors_offsets
 
std::vector< ir::PermuteType_permute_types
 
std::unordered_map< const backend::ITensor *, std::vector< uint8_t > > _buffers_map
 

Detailed Description

Definition at line 65 of file IPermuteFunction.h.

Member Function Documentation

◆ optimize()

virtual void onert::exec::IPermuteFunction::optimize ( )
pure virtual

◆ permute()

void onert::exec::IPermuteFunction::permute ( backend::ITensor src_tensor,
backend::ITensor dst_tensor,
size_t  rank,
std::vector< size_t > &  src_offsets,
std::vector< size_t > &  dst_offsets,
const ir::PermuteType permute_type 
)
protected

Definition at line 238 of file IPermuteFunction.cc.

242{
243 if (src_tensor->total_size() == 0)
244 {
245 assert(dst_tensor->total_size() == 0);
246 return;
247 }
248
249 assert(src_tensor != dst_tensor);
250 if (underlying_type(src_tensor->data_type()) != underlying_type(dst_tensor->data_type()))
251 {
252 typeAwareQuantize(src_tensor, dst_tensor, permute_type);
253 return;
254 }
255
256 switch (src_tensor->data_type())
257 {
258 case ir::DataType::FLOAT32:
259 permute<float>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
260 break;
261 case ir::DataType::INT32:
262 permute<int32_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
263 break;
264 case ir::DataType::UINT32:
265 permute<uint32_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
266 break;
267 case ir::DataType::BOOL8:
268 case ir::DataType::QUANT_UINT8_ASYMM:
269 case ir::DataType::UINT8:
270 permute<uint8_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
271 break;
272 case ir::DataType::QUANT_INT8_ASYMM:
273 case ir::DataType::QUANT_INT8_SYMM:
274 permute<int8_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
275 break;
276 case ir::DataType::INT64:
277 permute<int64_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
278 break;
279 case ir::DataType::QUANT_INT16_SYMM:
280 permute<int16_t>(src_tensor, dst_tensor, rank, src_offsets, dst_offsets, permute_type);
281 break;
282 default:
283 throw std::runtime_error("IPermuteFunction: Not supported data type");
284 break;
285 }
286}
const std::type_info & underlying_type(ir::DataType type) const
CLTensor src_tensor
CLTensor dst_tensor

References dst_tensor, src_tensor, and underlying_type().

Referenced by onert::backend::builtin::train::kernel::PermuteLayer::backward(), and onert::backend::builtin::kernel::PermuteLayer::run().

◆ prepare()

virtual void onert::exec::IPermuteFunction::prepare ( )
inlineoverridevirtual

Reimplemented from onert::exec::IFunction.

Definition at line 70 of file IPermuteFunction.h.

70{ optimize(); }

References optimize().

◆ run()

virtual void onert::exec::IPermuteFunction::run ( )
overridevirtual

◆ underlying_type()

const std::type_info & onert::exec::IPermuteFunction::underlying_type ( ir::DataType  type) const
protected

Definition at line 288 of file IPermuteFunction.cc.

289{
290 switch (type)
291 {
292 case ir::DataType::FLOAT32:
293 return typeid(float);
294 case ir::DataType::INT32:
295 return typeid(int32_t);
296 case ir::DataType::UINT32:
297 return typeid(uint32_t);
298 case ir::DataType::INT64:
299 return typeid(int64_t);
300 case ir::DataType::BOOL8:
301 case ir::DataType::QUANT_UINT8_ASYMM:
302 case ir::DataType::UINT8:
303 return typeid(uint8_t);
304 case ir::DataType::QUANT_INT8_ASYMM:
305 case ir::DataType::QUANT_INT8_SYMM:
306 return typeid(int8_t);
307 case ir::DataType::QUANT_INT16_SYMM:
308 return typeid(int16_t);
309 default:
310 throw std::runtime_error("IPermuteFunction: Not supported data type");
311 }
312}

Referenced by onert::backend::builtin::kernel::PermuteLayer::optimize(), permute(), and onert::backend::builtin::kernel::PermuteLayer::run().

Field Documentation

◆ _buffers_map

std::unordered_map<const backend::ITensor *, std::vector<uint8_t> > onert::exec::IPermuteFunction::_buffers_map
protected

◆ _dst_tensors

◆ _dst_tensors_offsets

◆ _permute_types

◆ _src_tensors

◆ _src_tensors_offsets


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