blob: 264ddce2deab7d5fa6dcf34d415ab851d7a2fffa [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
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010038using RefAdditionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000039 RefElementwiseWorkload<std::plus<float>,
David Beck279f8722018-09-12 13:50:03 +010040 AdditionQueueDescriptor,
41 StringMapping::RefAdditionWorkload_Execute>;
42
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010043using RefSubtractionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000044 RefElementwiseWorkload<std::minus<float>,
David Beck279f8722018-09-12 13:50:03 +010045 SubtractionQueueDescriptor,
46 StringMapping::RefSubtractionWorkload_Execute>;
47
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010048using RefMultiplicationWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000049 RefElementwiseWorkload<std::multiplies<float>,
David Beck279f8722018-09-12 13:50:03 +010050 MultiplicationQueueDescriptor,
51 StringMapping::RefMultiplicationWorkload_Execute>;
52
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010053using RefDivisionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000054 RefElementwiseWorkload<std::divides<float>,
David Beck279f8722018-09-12 13:50:03 +010055 DivisionQueueDescriptor,
56 StringMapping::RefDivisionWorkload_Execute>;
57
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010058using RefMaximumWorkload =
saoste012df12b32018-11-28 16:57:20 +000059 RefElementwiseWorkload<armnn::maximum<float>,
saoste012df12b32018-11-28 16:57:20 +000060 MaximumQueueDescriptor,
61 StringMapping::RefMaximumWorkload_Execute>;
62
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010063using RefMinimumWorkload =
64 RefElementwiseWorkload<armnn::minimum<float>,
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000065 MinimumQueueDescriptor,
66 StringMapping::RefMinimumWorkload_Execute>;
Derek Lambertif30f7d32019-04-09 10:25:02 +010067
David Beck279f8722018-09-12 13:50:03 +010068} // armnn