blob: b08dff84ed9793fd22e26b0787b61e0b94c0421e [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
Mike Kelly07810fc2020-11-12 10:58:48 +00006#include <armnn/BackendOptions.hpp>
Matteo Martincighe5b8eb92019-11-28 15:45:42 +00007#include <armnn/backends/IBackendInternal.hpp>
Matteo Martincighd0dc7702019-08-01 17:09:03 +01008
9namespace armnn
10{
11
12ARMNN_NO_DEPRECATE_WARN_BEGIN
13IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter(
Derek Lamberti901ea112019-12-10 22:07:09 +000014 const std::shared_ptr<SubGraph>& /*subGrapg*/) const
Matteo Martincighd0dc7702019-08-01 17:09:03 +010015{
16 return ISubGraphConverterPtr{};
17}
18
19IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const
20{
21 return Optimizations{};
22}
23
Derek Lamberti901ea112019-12-10 22:07:09 +000024IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& /*subGraph*/,
Matteo Martincighd0dc7702019-08-01 17:09:03 +010025 bool& optimizationAttempted) const
26{
27 optimizationAttempted = false;
28 return nullptr;
29}
30ARMNN_NO_DEPRECATE_WARN_END
31
32IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
33{
34 return IMemoryManagerUniquePtr();
35}
36
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010037IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
Derek Lamberti901ea112019-12-10 22:07:09 +000038 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010039{
40 return IWorkloadFactoryPtr{};
41}
42
Sadik Armagan04a72972020-09-14 15:44:18 +010043IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
44 const IMemoryManagerSharedPtr& memoryManager,
45 const ModelOptions& modelOptions) const
46{
Sadik Armagana25886e2020-09-15 17:17:08 +010047 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010048 {
Sadik Armagana25886e2020-09-15 17:17:08 +010049 for (auto optionsGroup : modelOptions)
50 {
51 if (optionsGroup.GetBackendId() == GetId())
52 {
53 return IWorkloadFactoryPtr{};
54 }
55 }
Sadik Armagan04a72972020-09-14 15:44:18 +010056 }
Sadik Armagana25886e2020-09-15 17:17:08 +010057
58 return CreateWorkloadFactory(memoryManager);
Sadik Armagan04a72972020-09-14 15:44:18 +010059}
60
61IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
62 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
63 const ModelOptions& modelOptions) const
64{
Sadik Armagana25886e2020-09-15 17:17:08 +010065 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010066 {
Sadik Armagana25886e2020-09-15 17:17:08 +010067 for (auto optionsGroup : modelOptions)
68 {
69 if (optionsGroup.GetBackendId() == GetId())
70 {
71 return IWorkloadFactoryPtr{};
72 }
73 }
Sadik Armagan04a72972020-09-14 15:44:18 +010074 }
Sadik Armagana25886e2020-09-15 17:17:08 +010075
76 return CreateWorkloadFactory(tensorHandleFactoryRegistry);
Sadik Armagan04a72972020-09-14 15:44:18 +010077}
78
Matteo Martincighd0dc7702019-08-01 17:09:03 +010079IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
80{
81 return IBackendContextPtr{};
82}
83
Sadik Armagan045f6be2020-09-10 13:37:32 +010084IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
85 const ModelOptions&) const
86{
87 return IBackendSpecificModelContextPtr{};
88}
89
Colm Donelane49755b2020-01-29 15:22:43 +000090IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000091 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
Colm Donelane49755b2020-01-29 15:22:43 +000092{
93 return IBackendProfilingContextPtr{};
94}
95
Sadik Armagana25886e2020-09-15 17:17:08 +010096IBackendInternal::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
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100112// Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
113// Override this method with a custom optimization implementation.
114OptimizationViews 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
Mike Kelly07810fc2020-11-12 10:58:48 +0000139OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
140 const ModelOptions& /*modelOptions*/) const
141{
142 return OptimizeSubgraphView(subgraph);
143}
144
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100145bool IBackendInternal::SupportsTensorAllocatorAPI() const
146{
147 return !GetHandleFactoryPreferences().empty();
148}
149
150ITensorHandleFactory::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
161std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
162{
163 return std::vector<ITensorHandleFactory::FactoryId>();
164}
165
166} // namespace armnn