blob: 4dc4b5ba5ab1dbc9e81eee6527b0c91311b50af2 [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);
Sadik Armaganef38d5d2019-03-25 09:03:35 +000029 void Execute() const override;
Finn Williamsb8181f72021-04-07 10:23:21 +010030 void ExecuteAsync(WorkingMemDescriptor& workingMemDescriptor) override;
Derek Lambertif30f7d32019-04-09 10:25:02 +010031
32private:
Finn Williamsb8181f72021-04-07 10:23:21 +010033 void Execute(std::vector<ITensorHandle*> inputs, std::vector<ITensorHandle*> outputs) const;
David Beck279f8722018-09-12 13:50:03 +010034};
35
Finn Williamscbd2c232020-06-22 15:58:32 +010036template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010037using RefAdditionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010038 RefElementwiseWorkload<std::plus<DataType>,
David Beck279f8722018-09-12 13:50:03 +010039 AdditionQueueDescriptor,
40 StringMapping::RefAdditionWorkload_Execute>;
41
Finn Williamscbd2c232020-06-22 15:58:32 +010042template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010043using RefSubtractionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010044 RefElementwiseWorkload<std::minus<DataType>,
David Beck279f8722018-09-12 13:50:03 +010045 SubtractionQueueDescriptor,
46 StringMapping::RefSubtractionWorkload_Execute>;
47
Finn Williamscbd2c232020-06-22 15:58:32 +010048template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010049using RefMultiplicationWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010050 RefElementwiseWorkload<std::multiplies<DataType>,
David Beck279f8722018-09-12 13:50:03 +010051 MultiplicationQueueDescriptor,
52 StringMapping::RefMultiplicationWorkload_Execute>;
53
Finn Williamscbd2c232020-06-22 15:58:32 +010054template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010055using RefDivisionWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010056 RefElementwiseWorkload<std::divides<DataType>,
David Beck279f8722018-09-12 13:50:03 +010057 DivisionQueueDescriptor,
58 StringMapping::RefDivisionWorkload_Execute>;
59
Finn Williamscbd2c232020-06-22 15:58:32 +010060template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010061using RefMaximumWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010062 RefElementwiseWorkload<armnn::maximum<DataType>,
saoste012df12b32018-11-28 16:57:20 +000063 MaximumQueueDescriptor,
64 StringMapping::RefMaximumWorkload_Execute>;
65
Finn Williamscbd2c232020-06-22 15:58:32 +010066template <typename DataType = float>
Sadik Armagan2e6dc3a2019-04-03 17:48:18 +010067using RefMinimumWorkload =
Finn Williamscbd2c232020-06-22 15:58:32 +010068 RefElementwiseWorkload<armnn::minimum<DataType>,
Éanna Ó Catháin20e58802018-12-04 10:29:06 +000069 MinimumQueueDescriptor,
70 StringMapping::RefMinimumWorkload_Execute>;
Derek Lambertif30f7d32019-04-09 10:25:02 +010071
David Beck279f8722018-09-12 13:50:03 +010072} // armnn