xref: /aosp_15_r20/external/armnn/src/backends/backendsCommon/IBackendInternal.cpp (revision 89c4ff92f2867872bb9e2354d150bf0c8c502810)
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