blob: 371904977af9ac668e54b216e9d8bf2613d49912 [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>
saoste012df12b32018-11-28 16:57:20 +000011#include "Maximum.hpp"
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000012#include "Minimum.hpp"
ruoyan01f9426b32019-01-03 15:10:00 +000013#include "StringMapping.hpp"
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000014
David Beck279f8722018-09-12 13:50:03 +010015namespace armnn
16{
17
18template <typename Functor,
19 typename armnn::DataType DataType,
20 typename ParentDescriptor,
21 typename armnn::StringMapping::Id DebugString>
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000022class RefElementwiseWorkload
Sadik Armaganef38d5d2019-03-25 09:03:35 +000023 : public TypedWorkload<ParentDescriptor, DataType>
David Beck279f8722018-09-12 13:50:03 +010024{
25public:
David Beck279f8722018-09-12 13:50:03 +010026
Sadik Armaganef38d5d2019-03-25 09:03:35 +000027 using TypedWorkload<ParentDescriptor, DataType>::m_Data;
28 using TypedWorkload<ParentDescriptor, DataType>::TypedWorkload;
David Beck279f8722018-09-12 13:50:03 +010029
Sadik Armaganef38d5d2019-03-25 09:03:35 +000030 void Execute() const override;
David Beck279f8722018-09-12 13:50:03 +010031};
32
33using RefAdditionFloat32Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000034 RefElementwiseWorkload<std::plus<float>,
David Beck279f8722018-09-12 13:50:03 +010035 DataType::Float32,
36 AdditionQueueDescriptor,
37 StringMapping::RefAdditionWorkload_Execute>;
38
39using RefAdditionUint8Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000040 RefElementwiseWorkload<std::plus<float>,
David Beck279f8722018-09-12 13:50:03 +010041 DataType::QuantisedAsymm8,
42 AdditionQueueDescriptor,
43 StringMapping::RefAdditionWorkload_Execute>;
44
David Beck279f8722018-09-12 13:50:03 +010045using RefSubtractionFloat32Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000046 RefElementwiseWorkload<std::minus<float>,
David Beck279f8722018-09-12 13:50:03 +010047 DataType::Float32,
48 SubtractionQueueDescriptor,
49 StringMapping::RefSubtractionWorkload_Execute>;
50
51using RefSubtractionUint8Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000052 RefElementwiseWorkload<std::minus<float>,
David Beck279f8722018-09-12 13:50:03 +010053 DataType::QuantisedAsymm8,
54 SubtractionQueueDescriptor,
55 StringMapping::RefSubtractionWorkload_Execute>;
56
57using RefMultiplicationFloat32Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000058 RefElementwiseWorkload<std::multiplies<float>,
David Beck279f8722018-09-12 13:50:03 +010059 DataType::Float32,
60 MultiplicationQueueDescriptor,
61 StringMapping::RefMultiplicationWorkload_Execute>;
62
63using RefMultiplicationUint8Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000064 RefElementwiseWorkload<std::multiplies<float>,
David Beck279f8722018-09-12 13:50:03 +010065 DataType::QuantisedAsymm8,
66 MultiplicationQueueDescriptor,
67 StringMapping::RefMultiplicationWorkload_Execute>;
68
69using RefDivisionFloat32Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000070 RefElementwiseWorkload<std::divides<float>,
David Beck279f8722018-09-12 13:50:03 +010071 DataType::Float32,
72 DivisionQueueDescriptor,
73 StringMapping::RefDivisionWorkload_Execute>;
74
75using RefDivisionUint8Workload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000076 RefElementwiseWorkload<std::divides<float>,
David Beck279f8722018-09-12 13:50:03 +010077 DataType::QuantisedAsymm8,
78 DivisionQueueDescriptor,
79 StringMapping::RefDivisionWorkload_Execute>;
80
saoste012df12b32018-11-28 16:57:20 +000081using RefMaximumFloat32Workload =
82 RefElementwiseWorkload<armnn::maximum<float>,
83 DataType::Float32,
84 MaximumQueueDescriptor,
85 StringMapping::RefMaximumWorkload_Execute>;
86
87using RefMaximumUint8Workload =
88 RefElementwiseWorkload<armnn::maximum<float>,
FrancisMurtagh878f0232018-12-19 10:56:15 +000089 DataType::QuantisedAsymm8,
90 MaximumQueueDescriptor,
91 StringMapping::RefMaximumWorkload_Execute>;
saoste012df12b32018-11-28 16:57:20 +000092
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000093using RefMinimumFloat32Workload =
94 RefElementwiseWorkload<minimum<float>,
95 DataType::Float32,
96 MinimumQueueDescriptor,
97 StringMapping::RefMinimumWorkload_Execute>;
98
99using RefMinimumUint8Workload =
100 RefElementwiseWorkload<minimum<float>,
101 DataType::QuantisedAsymm8,
102 MinimumQueueDescriptor,
103 StringMapping::RefMinimumWorkload_Execute>;
David Beck279f8722018-09-12 13:50:03 +0100104} // armnn