• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
9 namespace armnn
10 {
11 
12 ARMNN_NO_DEPRECATE_WARN_BEGIN
CreateSubGraphConverter(const std::shared_ptr<SubGraph> &) const13 IBackendInternal::ISubGraphConverterPtr IBackendInternal::CreateSubGraphConverter(
14     const std::shared_ptr<SubGraph>& /*subGrapg*/) const
15 {
16     return ISubGraphConverterPtr{};
17 }
18 
GetOptimizations() const19 IBackendInternal::Optimizations IBackendInternal::GetOptimizations() const
20 {
21     return Optimizations{};
22 }
23 
OptimizeSubGraph(const SubGraph &,bool & optimizationAttempted) const24 IBackendInternal::SubGraphUniquePtr IBackendInternal::OptimizeSubGraph(const SubGraph& /*subGraph*/,
25                                                                        bool& optimizationAttempted) const
26 {
27     optimizationAttempted = false;
28     return nullptr;
29 }
30 ARMNN_NO_DEPRECATE_WARN_END
31 
CreateMemoryManager() const32 IMemoryManagerUniquePtr IBackendInternal::CreateMemoryManager() const
33 {
34     return IMemoryManagerUniquePtr();
35 }
36 
CreateWorkloadFactory(class TensorHandleFactoryRegistry &) const37 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
38     class TensorHandleFactoryRegistry& /*tensorHandleFactoryRegistry*/) const
39 {
40     return IWorkloadFactoryPtr{};
41 }
42 
CreateWorkloadFactory(const IMemoryManagerSharedPtr & memoryManager,const ModelOptions & modelOptions) const43 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
44     const IMemoryManagerSharedPtr& memoryManager,
45     const ModelOptions& modelOptions) const
46 {
47     if (!modelOptions.empty())
48     {
49         for (auto optionsGroup : modelOptions)
50         {
51             if (optionsGroup.GetBackendId() == GetId())
52             {
53                 return IWorkloadFactoryPtr{};
54             }
55         }
56     }
57 
58     return CreateWorkloadFactory(memoryManager);
59 }
60 
CreateWorkloadFactory(class TensorHandleFactoryRegistry & tensorHandleFactoryRegistry,const ModelOptions & modelOptions) const61 IBackendInternal::IWorkloadFactoryPtr IBackendInternal::CreateWorkloadFactory(
62     class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry,
63     const ModelOptions& modelOptions) const
64 {
65     if (!modelOptions.empty())
66     {
67         for (auto optionsGroup : modelOptions)
68         {
69             if (optionsGroup.GetBackendId() == GetId())
70             {
71                 return IWorkloadFactoryPtr{};
72             }
73         }
74     }
75 
76     return CreateWorkloadFactory(tensorHandleFactoryRegistry);
77 }
78 
CreateBackendContext(const IRuntime::CreationOptions &) const79 IBackendInternal::IBackendContextPtr IBackendInternal::CreateBackendContext(const IRuntime::CreationOptions&) const
80 {
81     return IBackendContextPtr{};
82 }
83 
CreateBackendSpecificModelContext(const ModelOptions &) const84 IBackendInternal::IBackendSpecificModelContextPtr IBackendInternal::CreateBackendSpecificModelContext(
85     const ModelOptions&) const
86 {
87     return IBackendSpecificModelContextPtr{};
88 }
89 
CreateBackendProfilingContext(const IRuntime::CreationOptions &,IBackendProfilingPtr &)90 IBackendInternal::IBackendProfilingContextPtr IBackendInternal::CreateBackendProfilingContext(
91     const IRuntime::CreationOptions&, IBackendProfilingPtr&)
92 {
93     return IBackendProfilingContextPtr{};
94 }
95 
GetLayerSupport(const ModelOptions & modelOptions) const96 IBackendInternal::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 
112 // Default implementation of OptimizeSubgraphView for backward compatibility with the old API.
113 // Override this method with a custom optimization implementation.
OptimizeSubgraphView(const SubgraphView & subgraph) const114 OptimizationViews 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 
OptimizeSubgraphView(const SubgraphView & subgraph,const ModelOptions &) const139 OptimizationViews IBackendInternal::OptimizeSubgraphView(const SubgraphView& subgraph,
140                                                          const ModelOptions& /*modelOptions*/) const
141 {
142     return OptimizeSubgraphView(subgraph);
143 }
144 
SupportsTensorAllocatorAPI() const145 bool IBackendInternal::SupportsTensorAllocatorAPI() const
146 {
147     return !GetHandleFactoryPreferences().empty();
148 }
149 
GetBackwardCompatibleFavoriteHandleFactory()150 ITensorHandleFactory::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 
GetHandleFactoryPreferences() const161 std::vector<ITensorHandleFactory::FactoryId> IBackendInternal::GetHandleFactoryPreferences() const
162 {
163     return std::vector<ITensorHandleFactory::FactoryId>();
164 }
165 
166 } // namespace armnn
167