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