1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5
6 #include <armnn/BackendOptions.hpp>
7 #include <armnn/backends/IBackendInternal.hpp>
8
9 namespace armnn
10 {
11
12 ARMNN_NO_DEPRECATE_WARN_BEGIN
CreateSubGraphConverter(const std::shared_ptr<SubGraph> &) const13 IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter(
14 const std::shared_ptr<SubGraph>& /*subGrapg*/) const
15 {
16 return ISubGraphConverterPtr{};
17 }
18
GetOptimizations() const19 IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const
20 {
21 return Optimizations{};
22 }
23
OptimizeSubGraph(const SubGraph &,bool & optimizationAttempted) const24 IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& /*subGraph*/,
25 bool& optimizationAttempted) const
26 {
27 optimizationAttempted = false;
28 return nullptr;
29 }
30 ARMNN_NO_DEPRECATE_WARN_END
31
CreateMemoryManager() const32 IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
33 {
34 return IMemoryManagerUniquePtr();
35 }
36
CreateWorkloadFactory(class TensorHandleFactoryRegistry &) const37 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
38 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
39 {
40 return IWorkloadFactoryPtr{};
41 }
42
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager,const ModelOptions & modelOptions) const43 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
44 const IMemoryManagerSharedPtr& memoryManager,
45 const ModelOptions& modelOptions) const
46 {
47 if (!modelOptions.empty())
48 {
49 for (auto optionsGroup : modelOptions)
50 {
51 if (optionsGroup.GetBackendId() == GetId())
52 {
53 return IWorkloadFactoryPtr{};
54 }
55 }
56 }
57
58 return CreateWorkloadFactory(memoryManager);
59 }
60
CreateWorkloadFactory(class TensorHandleFactoryRegistry & tensorHandleFactoryRegistry,const ModelOptions & modelOptions) const61 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
62 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
63 const ModelOptions& modelOptions) const
64 {
65 if (!modelOptions.empty())
66 {
67 for (auto optionsGroup : modelOptions)
68 {
69 if (optionsGroup.GetBackendId() == GetId())
70 {
71 return IWorkloadFactoryPtr{};
72 }
73 }
74 }
75
76 return CreateWorkloadFactory(tensorHandleFactoryRegistry);
77 }
78
CreateBackendContext(const IRuntime::CreationOptions &) const79 IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
80 {
81 return IBackendContextPtr{};
82 }
83
CreateBackendSpecificModelContext(const ModelOptions &) const84 IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
85 const ModelOptions&) const
86 {
87 return IBackendSpecificModelContextPtr{};
88 }
89
CreateBackendProfilingContext(const IRuntime::CreationOptions &,IBackendProfilingPtr &)90 IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
91 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
92 {
93 return IBackendProfilingContextPtr{};
94 }
95
GetLayerSupport(const ModelOptions & modelOptions) const96 IBackendInternal::ILayerSupportSharedPtr IBackendInternal::GetLayerSupport(const ModelOptions& modelOptions) const
97 {
98 if (!modelOptions.empty())
99 {
100 for (auto optionsGroup : modelOptions)
101 {
102 if (optionsGroup.GetBackendId() == GetId())
103 {
104 return ILayerSupportSharedPtr{};
105 }
106 }
107 }
108
109 return GetLayerSupport();
110 }
111
112 // Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
113 // Override this method with a custom optimization implementation.
OptimizeSubgraphView(const SubgraphView & subgraph) const114 OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
115 {
116 bool optimizationAttempted = false;
117
118 ARMNN_NO_DEPRECATE_WARN_BEGIN
119 SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted);
120 ARMNN_NO_DEPRECATE_WARN_END
121
122 OptimizationViews result;
123 if (!optimizationAttempted)
124 {
125 result.AddUntouchedSubgraph(SubgraphView(subgraph));
126 }
127 else if (optSubgraph)
128 {
129 result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())});
130 }
131 else
132 {
133 result.AddFailedSubgraph(SubgraphView(subgraph));
134 }
135
136 return result;
137 }
138
OptimizeSubgraphView(const SubgraphView & subgraph,const ModelOptions &) const139 OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
140 const ModelOptions& /*modelOptions*/) const
141 {
142 return OptimizeSubgraphView(subgraph);
143 }
144
SupportsTensorAllocatorAPI() const145 bool IBackendInternal::SupportsTensorAllocatorAPI() const
146 {
147 return !GetHandleFactoryPreferences().empty();
148 }
149
GetBackwardCompatibleFavoriteHandleFactory()150 ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory()
151 {
152 auto favorites = GetHandleFactoryPreferences();
153 if (favorites.empty())
154 {
155 return ITensorHandleFactory::LegacyFactoryId;
156 }
157
158 return favorites[0];
159 }
160
GetHandleFactoryPreferences() const161 std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
162 {
163 return std::vector<ITensorHandleFactory::FactoryId>();
164 }
165
166 } // namespace armnn
167