blob: 524d20625a9cf480874da4d7695db00c863a1864 [file] [log] [blame]
kevmay012b4d88e2019-01-24 14:05:09 +00001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
6#pragma once
7
8#include <armnn/Types.hpp>
9#include <backendsCommon/Workload.hpp>
10#include <backendsCommon/WorkloadData.hpp>
11#include "StringMapping.hpp"
12
13namespace armnn
14{
15
16template <typename Functor,
17 typename armnn::DataType DataType,
18 typename ParentDescriptor,
19 typename armnn::StringMapping::Id DebugString>
20class RefComparisonWorkload
21{
22 // Needs specialization. The default is empty on purpose.
23};
24
25template <typename ParentDescriptor, typename Functor>
26class RefFloat32ComparisonWorkload : public BaseFloat32ComparisonWorkload<ParentDescriptor>
27{
28public:
29 using BaseFloat32ComparisonWorkload<ParentDescriptor>::BaseFloat32ComparisonWorkload;
30 void ExecuteImpl(const char * debugString) const;
31};
32
33template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
34class RefComparisonWorkload<Functor, armnn::DataType::Float32, ParentDescriptor, DebugString>
35 : public RefFloat32ComparisonWorkload<ParentDescriptor, Functor>
36{
37public:
38 using RefFloat32ComparisonWorkload<ParentDescriptor, Functor>::RefFloat32ComparisonWorkload;
39
40 virtual void Execute() const override
41 {
42 using Parent = RefFloat32ComparisonWorkload<ParentDescriptor, Functor>;
43 Parent::ExecuteImpl(StringMapping::Instance().Get(DebugString));
44 }
45};
46
47template <typename ParentDescriptor, typename Functor>
48class RefUint8ComparisonWorkload : public BaseUint8ComparisonWorkload<ParentDescriptor>
49{
50public:
51 using BaseUint8ComparisonWorkload<ParentDescriptor>::BaseUint8ComparisonWorkload;
52 void ExecuteImpl(const char * debugString) const;
53};
54
55template <typename Functor, typename ParentDescriptor, typename armnn::StringMapping::Id DebugString>
56class RefComparisonWorkload<Functor, armnn::DataType::QuantisedAsymm8, ParentDescriptor, DebugString>
57 : public RefUint8ComparisonWorkload<ParentDescriptor, Functor>
58{
59public:
60 using RefUint8ComparisonWorkload<ParentDescriptor, Functor>::RefUint8ComparisonWorkload;
61
62 virtual void Execute() const override
63 {
64 using Parent = RefUint8ComparisonWorkload<ParentDescriptor, Functor>;
65 Parent::ExecuteImpl(StringMapping::Instance().Get(DebugString));
66 }
67};
68
69using RefEqualFloat32Workload =
70 RefComparisonWorkload<std::equal_to<float>,
71 DataType::Float32,
72 EqualQueueDescriptor,
73 StringMapping::RefEqualWorkload_Execute>;
74
75using RefEqualUint8Workload =
76 RefComparisonWorkload<std::equal_to<uint8_t>,
77 DataType::QuantisedAsymm8,
78 EqualQueueDescriptor,
79 StringMapping::RefEqualWorkload_Execute>;
80
81using RefGreaterFloat32Workload =
82 RefComparisonWorkload<std::greater<float>,
83 DataType::Float32,
84 GreaterQueueDescriptor,
85 StringMapping::RefGreaterWorkload_Execute>;
86
87using RefGreaterUint8Workload =
88 RefComparisonWorkload<std::greater<uint8_t>,
89 DataType::QuantisedAsymm8,
90 GreaterQueueDescriptor,
91 StringMapping::RefGreaterWorkload_Execute>;
92} // armnn