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

#include <ElementwiseUnaryLayer.h>

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

Public Member Functions

 ElementwiseUnaryLayer ()
 
void configure (const IPortableTensor *input, IPortableTensor *output, const ElementwiseUnaryType op_type)
 
void run () override
 
- Public Member Functions inherited from onert::exec::IFunction
virtual ~IFunction ()=default
 
virtual void prepare ()
 

Detailed Description

Definition at line 48 of file ElementwiseUnaryLayer.h.

Constructor & Destructor Documentation

◆ ElementwiseUnaryLayer()

onert::backend::cpu::ops::ElementwiseUnaryLayer::ElementwiseUnaryLayer ( )
inline

Definition at line 51 of file ElementwiseUnaryLayer.h.

51 : _input(nullptr), _output(nullptr), _kernel()
52 {
53 // DO NOTHING
54 }

Member Function Documentation

◆ configure()

void onert::backend::cpu::ops::ElementwiseUnaryLayer::configure ( const IPortableTensor input,
IPortableTensor output,
const ElementwiseUnaryType  op_type 
)

Definition at line 204 of file ElementwiseUnaryLayer.cc.

206{
207 assert(input != nullptr);
208 assert(output != nullptr);
209
210 _input = input;
211 _output = output;
212
213 switch (op_type)
214 {
216 if ((input->data_type() == OperandType::FLOAT32))
217 {
218 _kernel = absFloat32;
219 }
220 else
221 {
222 throw std::runtime_error{"Abs: Unsupported data type"};
223 }
224 break;
226 _kernel = cast;
227 break;
229 if ((input->data_type() == OperandType::FLOAT32))
230 {
231 _kernel = cosFloat32;
232 }
233 else
234 {
235 throw std::runtime_error{"Cos: Unsupported data type"};
236 }
237 break;
239 if ((input->data_type() == OperandType::QUANT_UINT8_ASYMM))
240 {
241 _kernel = dequantizeUint8;
242 }
243 else if ((input->data_type() == OperandType::QUANT_INT8_ASYMM) ||
244 (input->data_type() == OperandType::QUANT_INT8_SYMM))
245 {
246 _kernel = dequantizeInt8;
247 }
248 else
249 {
250 throw std::runtime_error{"Dequantize: Unsupported data type"};
251 }
252 break;
254 if ((input->data_type() == OperandType::FLOAT32))
255 {
256 _kernel = expFloat32;
257 }
258 else
259 {
260 throw std::runtime_error{"Exp: Unsupported data type"};
261 }
262 break;
264 if ((input->data_type() == OperandType::FLOAT32))
265 {
266 _kernel = erfFloat32;
267 }
268 else
269 {
270 throw std::runtime_error{"Exp: Unsupported data type"};
271 }
272 break;
274 if ((input->data_type() == OperandType::FLOAT32))
275 {
276 _kernel = floorFloat32;
277 }
278 else
279 {
280 throw std::runtime_error{"Floor: Unsupported data type"};
281 }
282 break;
284 if ((input->data_type() == OperandType::FLOAT32))
285 {
286 _kernel = logFloat32;
287 }
288 else
289 {
290 throw std::runtime_error{"Log: Unsupported data type"};
291 }
292 break;
294 if ((input->data_type() == OperandType::BOOL8))
295 {
296 static_assert(sizeof(bool) == 1, "cpu backend supports bool type which is 1 byte");
297 _kernel = logicalNot;
298 }
299 else
300 {
301 throw std::runtime_error{"LogicalNot: Unsupported data type"};
302 }
303 break;
305 if ((input->data_type() == OperandType::FLOAT32))
306 {
307 _kernel = neg<float>;
308 }
309 else if ((input->data_type() == OperandType::INT64))
310 {
311 _kernel = neg<int64_t>;
312 }
313 else if ((input->data_type() == OperandType::INT32))
314 {
315 _kernel = neg<int32_t>;
316 }
317 else
318 {
319 throw std::runtime_error{"Neg: Unsupported data type"};
320 }
321 break;
323 if ((input->data_type() == OperandType::FLOAT32))
324 {
325 _kernel = roundFloat32;
326 }
327 else
328 {
329 throw std::runtime_error{"Round: Unsupported data type"};
330 }
331 break;
333 if ((input->data_type() == OperandType::FLOAT32))
334 {
335 _kernel = rsqrtFloat32;
336 }
337 else
338 {
339 throw std::runtime_error{"RSqrt: Unsupported data type"};
340 }
341 break;
343 if ((input->data_type() == OperandType::FLOAT32))
344 {
345 _kernel = sinFloat32;
346 }
347 else
348 {
349 throw std::runtime_error{"Sin: Unsupported data type"};
350 }
351 break;
353 if ((input->data_type() == OperandType::FLOAT32))
354 {
355 _kernel = sqrtFloat32;
356 }
357 else
358 {
359 throw std::runtime_error{"Sqrt: Unsupported data type"};
360 }
361 break;
363 if ((input->data_type() == OperandType::FLOAT32))
364 {
365 _kernel = squareFloat32;
366 }
367 else
368 {
369 throw std::runtime_error{"Square: Unsupported data type"};
370 }
371 break;
373 if (input->data_type() == OperandType::FLOAT32)
374 {
375 _kernel = zerosLikeFloat32<float>;
376 }
377 else if (input->data_type() == OperandType::INT32)
378 {
379 _kernel = zerosLikeFloat32<int32_t>;
380 }
381 else
382 {
383 throw std::runtime_error{"ZerosLike: Unsupported data type"};
384 }
385 break;
386 default:
387 throw std::runtime_error{"ElementwiseUnary: Unsupported ElementwiseUnary type"};
388 }
389}
T * cast(Object *)
Cast a generic object as a specific one.

References onert::backend::cpu::ops::kAbs, onert::backend::cpu::ops::kCast, onert::backend::cpu::ops::kCos, onert::backend::cpu::ops::kDequantize, onert::backend::cpu::ops::kErf, onert::backend::cpu::ops::kExp, onert::backend::cpu::ops::kFloor, onert::backend::cpu::ops::kLog, onert::backend::cpu::ops::kLogicalNot, onert::backend::cpu::ops::kNeg, onert::backend::cpu::ops::kRound, onert::backend::cpu::ops::kRSqrt, onert::backend::cpu::ops::kSin, onert::backend::cpu::ops::kSqrt, onert::backend::cpu::ops::kSquare, and onert::backend::cpu::ops::kZerosLike.

◆ run()

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

Implements onert::exec::IFunction.

Definition at line 391 of file ElementwiseUnaryLayer.cc.

391{ _kernel(_input, _output); }

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