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 #include <armnn/backends/WorkloadFactory.hpp>
9
10 namespace armnn
11 {
12
CreateMemoryManager() const13 IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
14 {
15 return IMemoryManagerUniquePtr();
16 }
17
CreateWorkloadFactory(class TensorHandleFactoryRegistry &) const18 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
19 class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
20 {
21 return IWorkloadFactoryPtr{};
22 }
23
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager,const ModelOptions & modelOptions) const24 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
25 const IMemoryManagerSharedPtr& memoryManager,
26 const ModelOptions& modelOptions) const
27 {
28 if (!modelOptions.empty())
29 {
30 for (auto optionsGroup : modelOptions)
31 {
32 if (optionsGroup.GetBackendId() == GetId())
33 {
34 return IWorkloadFactoryPtr{};
35 }
36 }
37 }
38
39 return CreateWorkloadFactory(memoryManager);
40 }
41
CreateWorkloadFactory(class TensorHandleFactoryRegistry & tensorHandleFactoryRegistry,const ModelOptions & modelOptions) const42 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
43 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
44 const ModelOptions& modelOptions) const
45 {
46 if (!modelOptions.empty())
47 {
48 for (auto optionsGroup : modelOptions)
49 {
50 if (optionsGroup.GetBackendId() == GetId())
51 {
52 return IWorkloadFactoryPtr{};
53 }
54 }
55 }
56
57 return CreateWorkloadFactory(tensorHandleFactoryRegistry);
58 }
59
CreateWorkloadFactory(class TensorHandleFactoryRegistry & tensorHandleFactoryRegistry,const ModelOptions & modelOptions,MemorySourceFlags inputFlags,MemorySourceFlags outputFlags) const60 IBackendInternal::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
CreateBackendContext(const IRuntime::CreationOptions &) const71 IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
72 {
73 return IBackendContextPtr{};
74 }
75
CreateBackendSpecificModelContext(const ModelOptions &) const76 IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
77 const ModelOptions&) const
78 {
79 return IBackendSpecificModelContextPtr{};
80 }
81
CreateBackendProfilingContext(const IRuntime::CreationOptions &,IBackendProfilingPtr &)82 IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
83 const IRuntime::CreationOptions&, IBackendProfilingPtr&)
84 {
85 return IBackendProfilingContextPtr{};
86 }
87
GetLayerSupport(const ModelOptions & modelOptions) const88 IBackendInternal::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
104 // Default implementation of OptimizeSubgraphView. Returns an untouched subgraph.
105 // Override this method with a custom optimization implementation.
OptimizeSubgraphView(const SubgraphView & subgraph) const106 OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph) const
107 {
108 OptimizationViews result;
109 result.AddUntouchedSubgraph(SubgraphView(subgraph));
110
111 return result;
112 }
113
OptimizeSubgraphView(const SubgraphView & subgraph,const ModelOptions &) const114 OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
115 const ModelOptions& /*modelOptions*/) const
116 {
117 return OptimizeSubgraphView(subgraph);
118 }
119
SupportsTensorAllocatorAPI() const120 bool IBackendInternal::SupportsTensorAllocatorAPI() const
121 {
122 return !GetHandleFactoryPreferences().empty();
123 }
124
RegisterTensorHandleFactories(class TensorHandleFactoryRegistry & registry,MemorySourceFlags,MemorySourceFlags)125 void IBackendInternal::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry,
126 MemorySourceFlags /*inputFlags*/,
127 MemorySourceFlags /*outputFlags*/)
128 {
129 return RegisterTensorHandleFactories(registry);
130 }
131
GetBackwardCompatibleFavoriteHandleFactory()132 ITensorHandleFactory::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
GetHandleFactoryPreferences() const143 std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
144 {
145 return std::vector<ITensorHandleFactory::FactoryId>();
146 }
147
148 } // namespace armnn
149