blob: 81af19627e0b991a60850780ae0b133ab0b8e606 [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
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010018template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
19class RefElementwiseWorkload : public BaseWorkload<ParentDescriptor>
David Beck279f8722018-09-12 13:50:03 +010020{
21public:
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010022 using BaseWorkload<ParentDescriptor>::m_Data;
23 using BaseWorkload<ParentDescriptor>::BaseWorkload;
David Beck279f8722018-09-12 13:50:03 +010024
Sadik Armaganef38d5d2019-03-25 09:03:35 +000025 void Execute() const override;
David Beck279f8722018-09-12 13:50:03 +010026};
27
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010028using RefAdditionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000029 RefElementwiseWorkload<std::plus<float>,
David Beck279f8722018-09-12 13:50:03 +010030 AdditionQueueDescriptor,
31 StringMapping::RefAdditionWorkload_Execute>;
32
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010033using RefSubtractionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000034 RefElementwiseWorkload<std::minus<float>,
David Beck279f8722018-09-12 13:50:03 +010035 SubtractionQueueDescriptor,
36 StringMapping::RefSubtractionWorkload_Execute>;
37
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010038using RefMultiplicationWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000039 RefElementwiseWorkload<std::multiplies<float>,
David Beck279f8722018-09-12 13:50:03 +010040 MultiplicationQueueDescriptor,
41 StringMapping::RefMultiplicationWorkload_Execute>;
42
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010043using RefDivisionWorkload =
Éanna Ó Catháind57415d2018-11-28 16:24:38 +000044 RefElementwiseWorkload<std::divides<float>,
David Beck279f8722018-09-12 13:50:03 +010045 DivisionQueueDescriptor,
46 StringMapping::RefDivisionWorkload_Execute>;
47
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010048using RefMaximumWorkload =
saoste012df12b32018-11-28 16:57:20 +000049 RefElementwiseWorkload<armnn::maximum<float>,
saoste012df12b32018-11-28 16:57:20 +000050 MaximumQueueDescriptor,
51 StringMapping::RefMaximumWorkload_Execute>;
52
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010053using RefMinimumWorkload =
54 RefElementwiseWorkload<armnn::minimum<float>,
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000055 MinimumQueueDescriptor,
56 StringMapping::RefMinimumWorkload_Execute>;
David Beck279f8722018-09-12 13:50:03 +010057} // armnn