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

287{
288 assert(input != nullptr);
289 assert(output != nullptr);
290
291 _input = input;
292 _output = output;
293
294 switch (op_type)
295 {
297 if ((input->data_type() == OperandType::FLOAT32))
298 {
299 _kernel = absFloat32;
300 }
301 else
302 {
303 throw std::runtime_error{"Abs: Unsupported data type"};
304 }
305 break;
307 _kernel = cast;
308 break;
310 if ((input->data_type() == OperandType::FLOAT32))
311 {
312 _kernel = cosFloat32;
313 }
314 else
315 {
316 throw std::runtime_error{"Cos: Unsupported data type"};
317 }
318 break;
320 if ((input->data_type() == OperandType::QUANT_UINT8_ASYMM))
321 {
322 _kernel = dequantizeUint8;
323 }
324 else if ((input->data_type() == OperandType::QUANT_INT8_ASYMM) ||
325 (input->data_type() == OperandType::QUANT_INT8_SYMM))
326 {
327 _kernel = dequantizeInt8;
328 }
329 else if (input->data_type() == OperandType::QUANT_INT16_SYMM)
330 {
331 _kernel = dequantizeInt16;
332 }
333 else
334 {
335 throw std::runtime_error{"Dequantize: Unsupported data type"};
336 }
337 break;
339 if ((input->data_type() == OperandType::FLOAT32))
340 {
341 _kernel = expFloat32;
342 }
343 else
344 {
345 throw std::runtime_error{"Exp: Unsupported data type"};
346 }
347 break;
349 if ((input->data_type() == OperandType::FLOAT32))
350 {
351 _kernel = erfFloat32;
352 }
353 else
354 {
355 throw std::runtime_error{"Exp: Unsupported data type"};
356 }
357 break;
359 if ((input->data_type() == OperandType::FLOAT32))
360 {
361 _kernel = floorFloat32;
362 }
363 else
364 {
365 throw std::runtime_error{"Floor: Unsupported data type"};
366 }
367 break;
369 if ((input->data_type() == OperandType::FLOAT32))
370 {
371 _kernel = logFloat32;
372 }
373 else
374 {
375 throw std::runtime_error{"Log: Unsupported data type"};
376 }
377 break;
379 if ((input->data_type() == OperandType::BOOL8))
380 {
381 static_assert(sizeof(bool) == 1, "cpu backend supports bool type which is 1 byte");
382 _kernel = logicalNot;
383 }
384 else
385 {
386 throw std::runtime_error{"LogicalNot: Unsupported data type"};
387 }
388 break;
390 if ((input->data_type() == OperandType::FLOAT32))
391 {
392 _kernel = neg<float>;
393 }
394 else if ((input->data_type() == OperandType::INT64))
395 {
396 _kernel = neg<int64_t>;
397 }
398 else if ((input->data_type() == OperandType::INT32))
399 {
400 _kernel = neg<int32_t>;
401 }
402 else
403 {
404 throw std::runtime_error{"Neg: Unsupported data type"};
405 }
406 break;
408 if ((input->data_type() == OperandType::FLOAT32))
409 {
410 _kernel = roundFloat32;
411 }
412 else
413 {
414 throw std::runtime_error{"Round: Unsupported data type"};
415 }
416 break;
418 if ((input->data_type() == OperandType::FLOAT32))
419 {
420 _kernel = rsqrtFloat32;
421 }
422 else
423 {
424 throw std::runtime_error{"RSqrt: Unsupported data type"};
425 }
426 break;
428 if ((input->data_type() == OperandType::FLOAT32))
429 {
430 _kernel = sinFloat32;
431 }
432 else
433 {
434 throw std::runtime_error{"Sin: Unsupported data type"};
435 }
436 break;
438 if ((input->data_type() == OperandType::FLOAT32))
439 {
440 _kernel = sqrtFloat32;
441 }
442 else
443 {
444 throw std::runtime_error{"Sqrt: Unsupported data type"};
445 }
446 break;
448 if ((input->data_type() == OperandType::FLOAT32))
449 {
450 _kernel = squareFloat32;
451 }
452 else
453 {
454 throw std::runtime_error{"Square: Unsupported data type"};
455 }
456 break;
458 if (input->data_type() == OperandType::FLOAT32)
459 {
460 _kernel = zerosLikeFloat32<float>;
461 }
462 else if (input->data_type() == OperandType::INT32)
463 {
464 _kernel = zerosLikeFloat32<int32_t>;
465 }
466 else
467 {
468 throw std::runtime_error{"ZerosLike: Unsupported data type"};
469 }
470 break;
471 default:
472 throw std::runtime_error{"ElementwiseUnary: Unsupported ElementwiseUnary type"};
473 }
474}
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 476 of file ElementwiseUnaryLayer.cc.

476{ _kernel(_input, _output); }

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