2 // Copyright © 2017 Arm Ltd. All rights reserved.
3 // SPDX-License-Identifier: MIT
6 #include "NeonBackend.hpp"
7 #include "NeonBackendId.hpp"
8 #include "NeonWorkloadFactory.hpp"
9 #include "NeonLayerSupport.hpp"
10 #include "NeonTensorHandleFactory.hpp"
12 #include <aclCommon/BaseMemoryManager.hpp>
14 #include <backendsCommon/BackendRegistry.hpp>
15 #include <backendsCommon/IBackendContext.hpp>
16 #include <backendsCommon/IMemoryManager.hpp>
18 #include <Optimizer.hpp>
20 #include <arm_compute/runtime/Allocator.h>
22 #include <boost/cast.hpp>
23 #include <boost/polymorphic_pointer_cast.hpp>
28 const BackendId& NeonBackend::GetIdStatic()
30 static const BackendId s_Id{NeonBackendId()};
34 IBackendInternal::IMemoryManagerUniquePtr NeonBackend::CreateMemoryManager() const
36 return std::make_unique<NeonMemoryManager>(std::make_unique<arm_compute::Allocator>(),
37 BaseMemoryManager::MemoryAffinity::Offset);
40 IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory(
41 const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const
43 return std::make_unique<NeonWorkloadFactory>(
44 boost::polymorphic_pointer_downcast<NeonMemoryManager>(memoryManager));
47 IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory(
48 class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const
50 auto memoryManager = std::make_shared<NeonMemoryManager>(std::make_unique<arm_compute::Allocator>(),
51 BaseMemoryManager::MemoryAffinity::Offset);
53 tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager);
54 return std::make_unique<NeonWorkloadFactory>(
55 boost::polymorphic_pointer_downcast<NeonMemoryManager>(memoryManager));
58 IBackendInternal::IBackendContextPtr NeonBackend::CreateBackendContext(const IRuntime::CreationOptions&) const
60 return IBackendContextPtr{};
63 IBackendInternal::Optimizations NeonBackend::GetOptimizations() const
65 return Optimizations{};
68 IBackendInternal::ILayerSupportSharedPtr NeonBackend::GetLayerSupport() const
70 static ILayerSupportSharedPtr layerSupport{new NeonLayerSupport};
74 OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const
76 OptimizationViews optimizationViews;
78 optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph));
80 return optimizationViews;
83 std::vector<ITensorHandleFactory::FactoryId> NeonBackend::GetHandleFactoryPreferences() const
85 return std::vector<ITensorHandleFactory::FactoryId>() = {NeonTensorHandleFactory::GetIdStatic()};
88 void NeonBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry)
90 auto memoryManager = std::make_shared<NeonMemoryManager>(std::make_unique<arm_compute::Allocator>(),
91 BaseMemoryManager::MemoryAffinity::Offset);
93 registry.RegisterMemoryManager(memoryManager);
94 registry.RegisterFactory(std::make_unique<NeonTensorHandleFactory>(memoryManager));