blob: 81fc515b98c02c1e569259d125eeb60eb7c10f74 [file] [log] [blame]
Matteo Martincighd0dc7702019-08-01 17:09:03 +01001//
2// Copyright © 2017 Arm Ltd. All rights reserved.
3// SPDX-License-Identifier: MIT
4//
5
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00006#include <armnn/backends/IBackendInternal.hpp>
Matteo Martincighd0dc7702019-08-01 17:09:03 +01007
8namespace armnn
9{
10
11ARMNN_NO_DEPRECATE_WARN_BEGIN
12IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter(
Derek Lamberti901ea112019-12-10 22:07:09 +000013 const std::shared_ptr<SubGraph>& /*subGrapg*/) const
Matteo Martincighd0dc7702019-08-01 17:09:03 +010014{
15 return ISubGraphConverterPtr{};
16}
17
18IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const
19{
20 return Optimizations{};
21}
22
Derek Lamberti901ea112019-12-10 22:07:09 +000023IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& /*subGraph*/,
Matteo Martincighd0dc7702019-08-01 17:09:03 +010024 bool& optimizationAttempted) const
25{
26 optimizationAttempted = false;
27 return nullptr;
28}
29ARMNN_NO_DEPRECATE_WARN_END
30
31IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
32{
33 return IMemoryManagerUniquePtr();
34}
35
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010036IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
Derek Lamberti901ea112019-12-10 22:07:09 +000037 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010038{
39 return IWorkloadFactoryPtr{};
40}
41
Sadik Armagan04a72972020-09-14 15:44:18 +010042IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
43 const IMemoryManagerSharedPtr& memoryManager,
44 const ModelOptions& modelOptions) const
45{
Sadik Armagana25886e2020-09-15 17:17:08 +010046 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010047 {
Sadik Armagana25886e2020-09-15 17:17:08 +010048 for (auto optionsGroup : modelOptions)
49 {
50 if (optionsGroup.GetBackendId() == GetId())
51 {
52 return IWorkloadFactoryPtr{};
53 }
54 }
Sadik Armagan04a72972020-09-14 15:44:18 +010055 }
Sadik Armagana25886e2020-09-15 17:17:08 +010056
57 return CreateWorkloadFactory(memoryManager);
Sadik Armagan04a72972020-09-14 15:44:18 +010058}
59
60IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
61 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
62 const ModelOptions& modelOptions) const
63{
Sadik Armagana25886e2020-09-15 17:17:08 +010064 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010065 {
Sadik Armagana25886e2020-09-15 17:17:08 +010066 for (auto optionsGroup : modelOptions)
67 {
68 if (optionsGroup.GetBackendId() == GetId())
69 {
70 return IWorkloadFactoryPtr{};
71 }
72 }
Sadik Armagan04a72972020-09-14 15:44:18 +010073 }
Sadik Armagana25886e2020-09-15 17:17:08 +010074
75 return CreateWorkloadFactory(tensorHandleFactoryRegistry);
Sadik Armagan04a72972020-09-14 15:44:18 +010076}
77
Matteo Martincighd0dc7702019-08-01 17:09:03 +010078IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
79{
80 return IBackendContextPtr{};
81}
82
Sadik Armagan045f6be2020-09-10 13:37:32 +010083IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
84 const ModelOptions&) const
85{
86 return IBackendSpecificModelContextPtr{};
87}
88
Colm Donelane49755b2020-01-29 15:22:43 +000089IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000090 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
Colm Donelane49755b2020-01-29 15:22:43 +000091{
92 return IBackendProfilingContextPtr{};
93}
94
Sadik Armagana25886e2020-09-15 17:17:08 +010095IBackendInternal::ILayerSupportSharedPtr IBackendInternal::GetLayerSupport(const ModelOptions& modelOptions) const
96{
97 if (!modelOptions.empty())
98 {
99 for (auto optionsGroup : modelOptions)
100 {
101 if (optionsGroup.GetBackendId() == GetId())
102 {
103 return ILayerSupportSharedPtr{};
104 }
105 }
106 }
107
108 return GetLayerSupport();
109}
110
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100111// Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
112// Override this method with a custom optimization implementation.
113OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
114{
115 bool optimizationAttempted = false;
116
117 ARMNN_NO_DEPRECATE_WARN_BEGIN
118 SubGraphUniquePtr optSubgraph = OptimizeSubGraph(subgraph, optimizationAttempted);
119 ARMNN_NO_DEPRECATE_WARN_END
120
121 OptimizationViews result;
122 if (!optimizationAttempted)
123 {
124 result.AddUntouchedSubgraph(SubgraphView(subgraph));
125 }
126 else if (optSubgraph)
127 {
128 result.AddSubstitution({subgraph, SubgraphView(*optSubgraph.get())});
129 }
130 else
131 {
132 result.AddFailedSubgraph(SubgraphView(subgraph));
133 }
134
135 return result;
136}
137
138bool IBackendInternal::SupportsTensorAllocatorAPI() const
139{
140 return !GetHandleFactoryPreferences().empty();
141}
142
143ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory()
144{
145 auto favorites = GetHandleFactoryPreferences();
146 if (favorites.empty())
147 {
148 return ITensorHandleFactory::LegacyFactoryId;
149 }
150
151 return favorites[0];
152}
153
154std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
155{
156 return std::vector<ITensorHandleFactory::FactoryId>();
157}
158
159} // namespace armnn