blob: 4ce41fea73f7c770e90fcc63cbce01ccc3e96dd3 [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>
Matthew Benthamc1c5f2a2023-03-30 14:24:46 +00008#include <armnn/backends/WorkloadFactory.hpp>
Matteo Martincighd0dc7702019-08-01 17:09:03 +01009
10namespace armnn
11{
12
Matteo Martincighd0dc7702019-08-01 17:09:03 +010013IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
14{
15 return IMemoryManagerUniquePtr();
16}
17
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010018IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
Derek Lamberti901ea112019-12-10 22:07:09 +000019 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
Narumol Prangnawarat11bd2612019-08-13 10:26:53 +010020{
21 return IWorkloadFactoryPtr{};
22}
23
Sadik Armagan04a72972020-09-14 15:44:18 +010024IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
25 const IMemoryManagerSharedPtr& memoryManager,
26 const ModelOptions& modelOptions) const
27{
Sadik Armagana25886e2020-09-15 17:17:08 +010028 if (!modelOptions.empty())
Sadik Armagan04a72972020-09-14 15:44:18 +010029 {
Sadik Armagana25886e2020-09-15 17:17:08 +010030 for (auto optionsGroup : modelOptions)
31 {
32 if (optionsGroup.GetBackendId() == GetId())
33 {
34 return IWorkloadFactoryPtr{};
35 }
36 }
Sadik Armagan04a72972020-09-14 15:44:18 +010037 }
Sadik Armagana25886e2020-09-15 17:17:08 +010038
39 return CreateWorkloadFactory(memoryManager);
Sadik Armagan04a72972020-09-14 15:44:18 +010040}
41
42IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
43 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
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(tensorHandleFactoryRegistry);
Sadik Armagan04a72972020-09-14 15:44:18 +010058}
59
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +010060IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
61 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
62 const ModelOptions& modelOptions,
63 MemorySourceFlags inputFlags,
64 MemorySourceFlags outputFlags) const
65{
66 IgnoreUnused(inputFlags);
67 IgnoreUnused(outputFlags);
68 return CreateWorkloadFactory(tensorHandleFactoryRegistry, modelOptions);
69}
70
Matteo Martincighd0dc7702019-08-01 17:09:03 +010071IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
72{
73 return IBackendContextPtr{};
74}
75
Sadik Armagan045f6be2020-09-10 13:37:32 +010076IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
77 const ModelOptions&) const
78{
79 return IBackendSpecificModelContextPtr{};
80}
81
Colm Donelane49755b2020-01-29 15:22:43 +000082IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
Colm Donelan1aff3932020-02-05 17:48:59 +000083 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
Colm Donelane49755b2020-01-29 15:22:43 +000084{
85 return IBackendProfilingContextPtr{};
86}
87
Sadik Armagana25886e2020-09-15 17:17:08 +010088IBackendInternal::ILayerSupportSharedPtr IBackendInternal::GetLayerSupport(const ModelOptions& modelOptions) const
89{
90 if (!modelOptions.empty())
91 {
92 for (auto optionsGroup : modelOptions)
93 {
94 if (optionsGroup.GetBackendId() == GetId())
95 {
96 return ILayerSupportSharedPtr{};
97 }
98 }
99 }
100
101 return GetLayerSupport();
102}
103
Jan Eilers1b2654f2021-09-24 15:45:46 +0100104// Default implementation of OptimizeSubgraphView. Returns an untouched subgraph.
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100105// Override this method with a custom optimization implementation.
106OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
107{
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100108 OptimizationViews result;
Jan Eilers1b2654f2021-09-24 15:45:46 +0100109 result.AddUntouchedSubgraph(SubgraphView(subgraph));
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100110
111 return result;
112}
113
Mike Kelly07810fc2020-11-12 10:58:48 +0000114OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
115 const ModelOptions& /*modelOptions*/) const
116{
117 return OptimizeSubgraphView(subgraph);
118}
119
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100120bool IBackendInternal::SupportsTensorAllocatorAPI() const
121{
122 return !GetHandleFactoryPreferences().empty();
123}
124
Narumol Prangnawarate5f0b242021-05-07 17:52:36 +0100125void IBackendInternal::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry,
126 MemorySourceFlags /*inputFlags*/,
127 MemorySourceFlags /*outputFlags*/)
128{
129 return RegisterTensorHandleFactories(registry);
130}
131
Matteo Martincighd0dc7702019-08-01 17:09:03 +0100132ITensorHandleFactory::FactoryId IBackendInternal::GetBackwardCompatibleFavoriteHandleFactory()
133{
134 auto favorites = GetHandleFactoryPreferences();
135 if (favorites.empty())
136 {
137 return ITensorHandleFactory::LegacyFactoryId;
138 }
139
140 return favorites[0];
141}
142
143std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
144{
145 return std::vector<ITensorHandleFactory::FactoryId>();
146}
147
148} // namespace armnn