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()22const BackendId& RefBackend::GetIdStatic() 23 { 24 static const BackendId s_Id{RefBackendId()}; 25 return s_Id; 26 } 27 CreateWorkloadFactory(const IBackendInternal::IMemoryManagerSharedPtr & memoryManager) const28IBackendInternal::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) const34IBackendInternal::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 &) const45IBackendInternal::IBackendContextPtr RefBackend::CreateBackendContext(const IRuntime::CreationOptions&) const 46 { 47 return IBackendContextPtr{}; 48 } 49 CreateBackendProfilingContext(const IRuntime::CreationOptions &,IBackendProfilingPtr &)50IBackendInternal::IBackendProfilingContextPtr RefBackend::CreateBackendProfilingContext( 51 const IRuntime::CreationOptions&, IBackendProfilingPtr&) 52 { 53 return IBackendProfilingContextPtr{}; 54 } 55 CreateMemoryManager() const56IBackendInternal::IMemoryManagerUniquePtr RefBackend::CreateMemoryManager() const 57 { 58 return std::make_unique<RefMemoryManager>(); 59 } 60 GetOptimizations() const61IBackendInternal::Optimizations RefBackend::GetOptimizations() const 62 { 63 return Optimizations{}; 64 } 65 GetLayerSupport() const66IBackendInternal::ILayerSupportSharedPtr RefBackend::GetLayerSupport() const 67 { 68 static ILayerSupportSharedPtr layerSupport{new RefLayerSupport}; 69 return layerSupport; 70 } 71 OptimizeSubgraphView(const SubgraphView & subgraph) const72OptimizationViews RefBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const 73 { 74 OptimizationViews optimizationViews; 75 76 optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); 77 78 return optimizationViews; 79 } 80 GetHandleFactoryPreferences() const81std::vector<ITensorHandleFactory::FactoryId> RefBackend::GetHandleFactoryPreferences() const 82 { 83 return std::vector<ITensorHandleFactory::FactoryId> { RefTensorHandleFactory::GetIdStatic() }; 84 } 85 RegisterTensorHandleFactories(class TensorHandleFactoryRegistry & registry)86void 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