ArmNN
 20.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 <armnn/BackendId.hpp>
9 
10 #include "DeviceSpec.hpp"
11 
12 #include <vector>
13 
14 namespace armnn
15 {
16 
18 {
23 
24  BackendSettings() = default;
25 
26  BackendSettings(const BackendIdVector& preferredBackends,
27  const IDeviceSpec& deviceSpec)
28  {
29  Initialize(preferredBackends, deviceSpec);
30  }
31 
33  : m_PreferredBackends(other.m_PreferredBackends)
34  , m_SupportedBackends(other.m_SupportedBackends)
35  , m_SelectedBackends(other.m_SelectedBackends)
36  , m_IgnoredBackends(other.m_IgnoredBackends)
37  {
38  }
39 
40  bool IsBackendPreferred(const BackendId& backend) const
41  {
42  return IsBackendInCollection(backend, m_PreferredBackends);
43  }
44 
45  bool IsBackendSupported(const BackendId& backend) const
46  {
47  return IsBackendInCollection(backend, m_SupportedBackends);
48  }
49 
50  bool IsBackendSelected(const BackendId& backend) const
51  {
52  return IsBackendInCollection(backend, m_SelectedBackends);
53  }
54 
55  bool IsBackendIgnored(const BackendId& backend) const
56  {
57  return IsBackendInCollection(backend, m_IgnoredBackends);
58  }
59 
60  bool IsCpuRefUsed() const
61  {
62  BackendId cpuBackendId(Compute::CpuRef);
63  return IsBackendSupported(cpuBackendId) && IsBackendPreferred(cpuBackendId);
64  }
65 
67  {
68  BackendIdVector availablePreferredBackends;
69  for (const BackendId& backend : m_PreferredBackends)
70  {
71  if (IsBackendSupported(backend) && !IsBackendIgnored(backend))
72  {
73  availablePreferredBackends.push_back(backend);
74  }
75  }
76  return availablePreferredBackends;
77  }
78 
79 private:
80  void Initialize(const BackendIdVector& preferredBackends,
81  const IDeviceSpec& deviceSpec)
82  {
83  // Copy preferred backends from input
84  m_PreferredBackends = preferredBackends;
85 
86  // Obtain list of supported backends
87  const DeviceSpec& spec = *boost::polymorphic_downcast<const DeviceSpec*>(&deviceSpec);
88  m_SupportedBackends = spec.GetSupportedBackends();
89  }
90 
91  template<typename Collection>
92  bool IsBackendInCollection(const BackendId& backend, const Collection& collection) const
93  {
94  return std::find(collection.begin(), collection.end(), backend) != collection.end();
95  }
96 };
97 
98 } //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) 2020 ARM Limited.
bool IsBackendSupported(const BackendId &backend) const
BackendIdVector GetAvailablePreferredBackends() const
Device specific knowledge to be passed to the optimizer.
Definition: Types.hpp:161
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