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
93
94
95
96
97
98
|
//
// Copyright © 2017 Arm Ltd. All rights reserved.
// SPDX-License-Identifier: MIT
//
#pragma once
#include <armnn/BackendId.hpp>
#include "DeviceSpec.hpp"
#include <vector>
namespace armnn
{
struct BackendSettings
{
BackendIdVector m_PreferredBackends;
BackendIdSet m_SupportedBackends;
BackendIdSet m_SelectedBackends;
BackendIdSet m_IgnoredBackends;
BackendSettings() = default;
BackendSettings(const BackendIdVector& preferredBackends,
const IDeviceSpec& deviceSpec)
{
Initialize(preferredBackends, deviceSpec);
}
BackendSettings(const BackendSettings& other)
: m_PreferredBackends(other.m_PreferredBackends)
, m_SupportedBackends(other.m_SupportedBackends)
, m_SelectedBackends(other.m_SelectedBackends)
, m_IgnoredBackends(other.m_IgnoredBackends)
{
}
bool IsBackendPreferred(const BackendId& backend) const
{
return IsBackendInCollection(backend, m_PreferredBackends);
}
bool IsBackendSupported(const BackendId& backend) const
{
return IsBackendInCollection(backend, m_SupportedBackends);
}
bool IsBackendSelected(const BackendId& backend) const
{
return IsBackendInCollection(backend, m_SelectedBackends);
}
bool IsBackendIgnored(const BackendId& backend) const
{
return IsBackendInCollection(backend, m_IgnoredBackends);
}
bool IsCpuRefUsed() const
{
BackendId cpuBackendId(Compute::CpuRef);
return IsBackendSupported(cpuBackendId) && IsBackendPreferred(cpuBackendId);
}
BackendIdVector GetAvailablePreferredBackends() const
{
BackendIdVector availablePreferredBackends;
for (const BackendId& backend : m_PreferredBackends)
{
if (IsBackendSupported(backend) && !IsBackendIgnored(backend))
{
availablePreferredBackends.push_back(backend);
}
}
return availablePreferredBackends;
}
private:
void Initialize(const BackendIdVector& preferredBackends,
const IDeviceSpec& deviceSpec)
{
// Copy preferred backends from input
m_PreferredBackends = preferredBackends;
// Obtain list of supported backends
const DeviceSpec& spec = *boost::polymorphic_downcast<const DeviceSpec*>(&deviceSpec);
m_SupportedBackends = spec.GetSupportedBackends();
}
template<typename Collection>
bool IsBackendInCollection(const BackendId& backend, const Collection& collection) const
{
return std::find(collection.begin(), collection.end(), backend) != collection.end();
}
};
} //namespace armnn
|