ONE - On-device Neural Engine
Loading...
Searching...
No Matches
onert::backend::cpu::ops::SelectLayer Class Reference

#include <SelectLayer.h>

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

Public Member Functions

 SelectLayer ()
 
void configure (const IPortableTensor *cond, const IPortableTensor *input_true, const IPortableTensor *input_false, 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 SelectLayer.h.

Constructor & Destructor Documentation

◆ SelectLayer()

onert::backend::cpu::ops::SelectLayer::SelectLayer ( )

Definition at line 54 of file SelectLayer.cc.

55 : _cond(nullptr), _input_true(nullptr), _input_false(nullptr), _output(nullptr)
56{
57 // DO NOTHING
58}

Member Function Documentation

◆ configure()

void onert::backend::cpu::ops::SelectLayer::configure ( const IPortableTensor cond,
const IPortableTensor input_true,
const IPortableTensor input_false,
IPortableTensor output 
)

Definition at line 60 of file SelectLayer.cc.

62{
63 _cond = cond;
64 _input_true = input_true;
65 _input_false = input_false;
66 _output = output;
67}

◆ run()

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

Implements onert::exec::IFunction.

Definition at line 69 of file SelectLayer.cc.

70{
71
72#define KERNEL_SELECT(type, op) \
73 nnfw::cker::op(getShape(_cond), getBuffer<uint8_t>(_cond), getShape(_input_true), \
74 getBuffer<type>(_input_true), getShape(_input_false), \
75 getBuffer<type>(_input_false), getShape(_output), getBuffer<type>(_output));
76
77#define KERNEL_SWITCH(type, op) \
78 switch (type) \
79 { \
80 break; \
81 case OperandType::FLOAT32: \
82 KERNEL_SELECT(float, op); \
83 break; \
84 default: \
85 throw std::runtime_error{"Select: unsupported data type"}; \
86 }
87
88 auto input_type = _input_true->data_type();
89 bool require_broadcast =
90 !HaveSameShapes(_input_true, _cond) || !HaveSameShapes(_input_false, _cond);
91 bool rank_one_select = ((_input_true->getShape().rank() == 1) && !require_broadcast);
92
93 if (rank_one_select)
94 {
95 KERNEL_SWITCH(input_type, RankOneSelect);
96 }
97 else if (require_broadcast)
98 {
99 KERNEL_SWITCH(input_type, BroadcastSelect4DSlow);
100 }
101 else
102 {
103 KERNEL_SWITCH(input_type, Select);
104 }
105}
#define KERNEL_SWITCH(type, op)
ir::DataType data_type() const override final
ir::Shape getShape() const override final
Get ir::Shape of tensor.
bool HaveSameShapes(const IPortableTensor *input1, const IPortableTensor *input2)

References onert::backend::IPortableTensor::data_type(), onert::backend::IPortableTensor::getShape(), onert::backend::cpu::ops::HaveSameShapes(), and KERNEL_SWITCH.


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