aboutsummaryrefslogtreecommitdiff
path: root/src/backends/reference/workloads/RefComparisonWorkload.hpp
blob: 524d20625a9cf480874da4d7695db00c863a1864 (plain)
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