blob: 579e5def34aef4c23a10e0500b77abc039229418 [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>
Finn Williams73c547d2022-02-15 20:47:34 +00009#include "RefBaseWorkload.hpp"
Colm Donelan0c479742021-12-10 12:43:54 +000010#include <armnn/backends/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>
Finn Williams73c547d2022-02-15 20:47:34 +000021class RefElementwiseWorkload : public RefBaseWorkload<ParentDescriptor>
David Beck279f8722018-09-12 13:50:03 +010022{
23public:
Derek Lambertif30f7d32019-04-09 10:25:02 +010024 RefElementwiseWorkload(const ParentDescriptor& descriptor, const WorkloadInfo& info);
Sadik Armaganef38d5d2019-03-25 09:03:35 +000025 void Execute() const override;
Finn Williamsb8181f72021-04-07 10:23:21 +010026 void ExecuteAsync(WorkingMemDescriptor& workingMemDescriptor) override;
Derek Lambertif30f7d32019-04-09 10:25:02 +010027
28private:
Matthew Bentham44f4fb52022-05-18 09:21:15 +010029 using InType = typename ElementwiseBinaryFunction<Functor>::InType;
30 using OutType = typename ElementwiseBinaryFunction<Functor>::OutType;
31 using RefBaseWorkload<ParentDescriptor>::m_Data;
32
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