// // Copyright © 2017 Arm Ltd. All rights reserved. // SPDX-License-Identifier: MIT // #include "NeonBackend.hpp" #include "NeonBackendId.hpp" #include "NeonWorkloadFactory.hpp" #include "NeonLayerSupport.hpp" #include "NeonTensorHandleFactory.hpp" #include #include #include #include #include #include #include #include namespace armnn { namespace { static BackendRegistry::StaticRegistryInitializer g_RegisterHelper { BackendRegistryInstance(), NeonBackend::GetIdStatic(), []() { return IBackendInternalUniquePtr(new NeonBackend); } }; } const BackendId& NeonBackend::GetIdStatic() { static const BackendId s_Id{NeonBackendId()}; return s_Id; } IBackendInternal::IMemoryManagerUniquePtr NeonBackend::CreateMemoryManager() const { return std::make_unique(std::make_unique(), BaseMemoryManager::MemoryAffinity::Offset); } IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory( const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const { return std::make_unique( boost::polymorphic_pointer_downcast(memoryManager)); } IBackendInternal::IWorkloadFactoryPtr NeonBackend::CreateWorkloadFactory( class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const { auto memoryManager = std::make_shared(std::make_unique(), BaseMemoryManager::MemoryAffinity::Offset); tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager); return std::make_unique( boost::polymorphic_pointer_downcast(memoryManager)); } IBackendInternal::IBackendContextPtr NeonBackend::CreateBackendContext(const IRuntime::CreationOptions&) const { return IBackendContextPtr{}; } IBackendInternal::Optimizations NeonBackend::GetOptimizations() const { return Optimizations{}; } IBackendInternal::ILayerSupportSharedPtr NeonBackend::GetLayerSupport() const { static ILayerSupportSharedPtr layerSupport{new NeonLayerSupport}; return layerSupport; } OptimizationViews NeonBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const { OptimizationViews optimizationViews; optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); return optimizationViews; } std::vector NeonBackend::GetHandleFactoryPreferences() const { return std::vector() = {NeonTensorHandleFactory::GetIdStatic()}; } void NeonBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) { auto memoryManager = std::make_shared(std::make_unique(), BaseMemoryManager::MemoryAffinity::Offset); registry.RegisterMemoryManager(memoryManager); registry.RegisterFactory(std::make_unique(memoryManager)); } } // namespace armnn