• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "RefBackend.hpp"
7 #include "RefBackendId.hpp"
8 #include "RefWorkloadFactory.hpp"
9 #include "RefLayerSupport.hpp"
10 #include "RefTensorHandleFactory.hpp"
11 
12 #include <armnn/BackendRegistry.hpp>
13 #include <armnn/backends/IBackendContext.hpp>
14 #include <armnn/backends/IMemoryManager.hpp>
15 #include <armnn/utility/PolymorphicDowncast.hpp>
16 
17 #include <Optimizer.hpp>
18 
19 namespace armnn
20 {
21 
GetIdStatic()22 const BackendId& RefBackend::GetIdStatic()
23 {
24     static const BackendId s_Id{RefBackendId()};
25     return s_Id;
26 }
27 
CreateWorkloadFactory(const IBackendInternal::IMemoryManagerSharedPtr & memoryManager) const28 IBackendInternal::IWorkloadFactoryPtr RefBackend::CreateWorkloadFactory(
29     const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const
30 {
31     return std::make_unique<RefWorkloadFactory>(PolymorphicPointerDowncast<RefMemoryManager>(memoryManager));
32 }
33 
CreateWorkloadFactory(class TensorHandleFactoryRegistry & tensorHandleFactoryRegistry) const34 IBackendInternal::IWorkloadFactoryPtr RefBackend::CreateWorkloadFactory(
35     class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const
36 {
37     auto memoryManager = std::make_shared<RefMemoryManager>();
38 
39     tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
40     tensorHandleFactoryRegistry.RegisterFactory(std::make_unique<RefTensorHandleFactory>(memoryManager));
41 
42     return std::make_unique<RefWorkloadFactory>(PolymorphicPointerDowncast<RefMemoryManager>(memoryManager));
43 }
44 
CreateBackendContext(const IRuntime::CreationOptions &) const45 IBackendInternal::IBackendContextPtr RefBackend::CreateBackendContext(const IRuntime::CreationOptions&) const
46 {
47     return IBackendContextPtr{};
48 }
49 
CreateBackendProfilingContext(const IRuntime::CreationOptions &,IBackendProfilingPtr &)50 IBackendInternal::IBackendProfilingContextPtr RefBackend::CreateBackendProfilingContext(
51     const IRuntime::CreationOptions&, IBackendProfilingPtr&)
52 {
53     return IBackendProfilingContextPtr{};
54 }
55 
CreateMemoryManager() const56 IBackendInternal::IMemoryManagerUniquePtr RefBackend::CreateMemoryManager() const
57 {
58     return std::make_unique<RefMemoryManager>();
59 }
60 
GetOptimizations() const61 IBackendInternal::Optimizations RefBackend::GetOptimizations() const
62 {
63     return Optimizations{};
64 }
65 
GetLayerSupport() const66 IBackendInternal::ILayerSupportSharedPtr RefBackend::GetLayerSupport() const
67 {
68     static ILayerSupportSharedPtr layerSupport{new RefLayerSupport};
69     return layerSupport;
70 }
71 
OptimizeSubgraphView(const SubgraphView & subgraph) const72 OptimizationViews RefBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const
73 {
74     OptimizationViews optimizationViews;
75 
76     optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph));
77 
78     return optimizationViews;
79 }
80 
GetHandleFactoryPreferences() const81 std::vector<ITensorHandleFactory::FactoryId> RefBackend::GetHandleFactoryPreferences() const
82 {
83     return std::vector<ITensorHandleFactory::FactoryId> { RefTensorHandleFactory::GetIdStatic() };
84 }
85 
RegisterTensorHandleFactories(class TensorHandleFactoryRegistry & registry)86 void RefBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry)
87 {
88     auto memoryManager = std::make_shared<RefMemoryManager>();
89 
90     registry.RegisterMemoryManager(memoryManager);
91     registry.RegisterFactory(std::make_unique<RefTensorHandleFactory>(memoryManager));
92 }
93 
94 } // namespace armnn
95