ArmNN
 21.02
BackendSettings.hpp
Go to the documentation of this file.
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #pragma once
7 
8 #include "DeviceSpec.hpp"
9 
10 #include <armnn/BackendId.hpp>
12 
13 #include <vector>
14 
15 namespace armnn
16 {
17 
19 {
24 
25  BackendSettings() = default;
26 
27  BackendSettings(const BackendIdVector& preferredBackends,
28  const IDeviceSpec& deviceSpec)
29  {
30  Initialize(preferredBackends, deviceSpec);
31  }
32 
34  : m_PreferredBackends(other.m_PreferredBackends)
35  , m_SupportedBackends(other.m_SupportedBackends)
36  , m_SelectedBackends(other.m_SelectedBackends)
37  , m_IgnoredBackends(other.m_IgnoredBackends)
38  {
39  }
40 
41  bool IsBackendPreferred(const BackendId& backend) const
42  {
43  return IsBackendInCollection(backend, m_PreferredBackends);
44  }
45 
46  bool IsBackendSupported(const BackendId& backend) const
47  {
48  return IsBackendInCollection(backend, m_SupportedBackends);
49  }
50 
51  bool IsBackendSelected(const BackendId& backend) const
52  {
53  return IsBackendInCollection(backend, m_SelectedBackends);
54  }
55 
56  bool IsBackendIgnored(const BackendId& backend) const
57  {
58  return IsBackendInCollection(backend, m_IgnoredBackends);
59  }
60 
61  bool IsCpuRefUsed() const
62  {
63  BackendId cpuBackendId(Compute::CpuRef);
64  return IsBackendSupported(cpuBackendId) && IsBackendPreferred(cpuBackendId);
65  }
66 
68  {
69  BackendIdVector availablePreferredBackends;
70  for (const BackendId& backend : m_PreferredBackends)
71  {
72  if (IsBackendSupported(backend) && !IsBackendIgnored(backend))
73  {
74  availablePreferredBackends.push_back(backend);
75  }
76  }
77  return availablePreferredBackends;
78  }
79 
80 private:
81  void Initialize(const BackendIdVector& preferredBackends,
82  const IDeviceSpec& deviceSpec)
83  {
84  // Copy preferred backends from input
85  m_PreferredBackends = preferredBackends;
86 
87  // Obtain list of supported backends
88  const DeviceSpec& spec = *PolymorphicDowncast<const DeviceSpec*>(&deviceSpec);
89  m_SupportedBackends = spec.GetSupportedBackends();
90  }
91 
92  template<typename Collection>
93  bool IsBackendInCollection(const BackendId& backend, const Collection& collection) const
94  {
95  return std::find(collection.begin(), collection.end(), backend) != collection.end();
96  }
97 };
98 
99 } //namespace armnn
BackendSettings(const BackendSettings &other)
CPU Execution: Reference C++ kernels.
BackendIdSet m_IgnoredBackends
bool IsBackendSelected(const BackendId &backend) const
std::unordered_set< BackendId > BackendIdSet
Definition: BackendId.hpp:191
std::vector< BackendId > BackendIdVector
Definition: BackendId.hpp:190
BackendSettings(const BackendIdVector &preferredBackends, const IDeviceSpec &deviceSpec)
BackendIdSet m_SupportedBackends
Copyright (c) 2021 ARM Limited and Contributors.
bool IsBackendSupported(const BackendId &backend) const
BackendIdVector GetAvailablePreferredBackends() const
Device specific knowledge to be passed to the optimizer.
Definition: Types.hpp:200
bool IsBackendIgnored(const BackendId &backend) const
BackendIdVector m_PreferredBackends
virtual const BackendIdSet & GetSupportedBackends() const override
Definition: DeviceSpec.hpp:25
BackendIdSet m_SelectedBackends
bool IsBackendPreferred(const BackendId &backend) const