blob: 03683b1a06f031ff75ad1f20e080bdb2cd277f5d [file] [log] [blame]
David Beck279f8722018-09-12 13:50:03 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <armnn/Types.hpp>
Aron Virginas-Tarc9cc8042018-11-01 16:15:57 +00009#include <backendsCommon/Workload.hpp>
10#include <backendsCommon/WorkloadData.hpp>
Derek Lambertif30f7d32019-04-09 10:25:02 +010011#include "BaseIterator.hpp"
12#include "ElementwiseFunction.hpp"
saoste012df12b32018-11-28 16:57:20 +000013#include "Maximum.hpp"
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000014#include "Minimum.hpp"
ruoyan01f9426b32019-01-03 15:10:00 +000015#include "StringMapping.hpp"
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000016
David Beck279f8722018-09-12 13:50:03 +010017namespace armnn
18{
19
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010020template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
21class RefElementwiseWorkload : public BaseWorkload<ParentDescriptor>
David Beck279f8722018-09-12 13:50:03 +010022{
23public:
josh minor4a3c6102020-01-06 16:40:46 -060024 using InType = typename ElementwiseBinaryFunction<Functor>::InType;
25 using OutType = typename ElementwiseBinaryFunction<Functor>::OutType;
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010026 using BaseWorkload<ParentDescriptor>::m_Data;
David Beck279f8722018-09-12 13:50:03 +010027
Derek Lambertif30f7d32019-04-09 10:25:02 +010028 RefElementwiseWorkload(const ParentDescriptor& descriptor, const WorkloadInfo& info);
29 void PostAllocationConfigure() override;
Sadik Armaganef38d5d2019-03-25 09:03:35 +000030 void Execute() const override;
Derek Lambertif30f7d32019-04-09 10:25:02 +010031
32private:
33 std::unique_ptr<Decoder<InType>> m_Input0;
34 std::unique_ptr<Decoder<InType>> m_Input1;
35 std::unique_ptr<Encoder<OutType>> m_Output;
David Beck279f8722018-09-12 13:50:03 +010036};
37
Finn Williamscbd2c232020-06-22 15:58:32 +010038template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010039using RefAdditionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010040 RefElementwiseWorkload<std::plus<DataType>,
David Beck279f8722018-09-12 13:50:03 +010041 AdditionQueueDescriptor,
42 StringMapping::RefAdditionWorkload_Execute>;
43
Finn Williamscbd2c232020-06-22 15:58:32 +010044template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010045using RefSubtractionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010046 RefElementwiseWorkload<std::minus<DataType>,
David Beck279f8722018-09-12 13:50:03 +010047 SubtractionQueueDescriptor,
48 StringMapping::RefSubtractionWorkload_Execute>;
49
Finn Williamscbd2c232020-06-22 15:58:32 +010050template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010051using RefMultiplicationWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010052 RefElementwiseWorkload<std::multiplies<DataType>,
David Beck279f8722018-09-12 13:50:03 +010053 MultiplicationQueueDescriptor,
54 StringMapping::RefMultiplicationWorkload_Execute>;
55
Finn Williamscbd2c232020-06-22 15:58:32 +010056template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010057using RefDivisionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010058 RefElementwiseWorkload<std::divides<DataType>,
David Beck279f8722018-09-12 13:50:03 +010059 DivisionQueueDescriptor,
60 StringMapping::RefDivisionWorkload_Execute>;
61
Finn Williamscbd2c232020-06-22 15:58:32 +010062template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010063using RefMaximumWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010064 RefElementwiseWorkload<armnn::maximum<DataType>,
saoste012df12b32018-11-28 16:57:20 +000065 MaximumQueueDescriptor,
66 StringMapping::RefMaximumWorkload_Execute>;
67
Finn Williamscbd2c232020-06-22 15:58:32 +010068template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010069using RefMinimumWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010070 RefElementwiseWorkload<armnn::minimum<DataType>,
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000071 MinimumQueueDescriptor,
72 StringMapping::RefMinimumWorkload_Execute>;
Derek Lambertif30f7d32019-04-09 10:25:02 +010073
David Beck279f8722018-09-12 13:50:03 +010074} // armnn