From 9270d9e52fc1d946cf543c11df71bcc1f7b38544 Mon Sep 17 00:00:00 2001 From: Francis Murtagh Date: Fri, 12 Aug 2022 13:54:17 +0100 Subject: IVGCVSW-7159 Implement simple TOSA Reference Backend skeleton * Added files based on RefBackend * Added PreCompiled Workload skeleton * Increment ABI version of armnnTestUtils for CreateInput which had been left as pure virtual, added base implementation for it. * Add IsTosaLayerSupported() for Addition Change-Id: I4c963adf3f50593d17ecdf21554502a64ad3bd76 --- src/backends/tosaReference/TosaRefBackend.cpp | 107 ++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) create mode 100644 src/backends/tosaReference/TosaRefBackend.cpp (limited to 'src/backends/tosaReference/TosaRefBackend.cpp') diff --git a/src/backends/tosaReference/TosaRefBackend.cpp b/src/backends/tosaReference/TosaRefBackend.cpp new file mode 100644 index 0000000000..093802958b --- /dev/null +++ b/src/backends/tosaReference/TosaRefBackend.cpp @@ -0,0 +1,107 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "TosaRefBackend.hpp" +#include "TosaRefBackendId.hpp" +#include "TosaRefWorkloadFactory.hpp" +#include "TosaRefLayerSupport.hpp" +#include "TosaRefTensorHandleFactory.hpp" + +#include +#include +#include +#include +#include +#include + +#include + +namespace armnn +{ + +const BackendId& TosaRefBackend::GetIdStatic() +{ + static const BackendId s_Id{TosaRefBackendId()}; + return s_Id; +} + +IBackendInternal::IWorkloadFactoryPtr TosaRefBackend::CreateWorkloadFactory( + const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const +{ + return std::make_unique(PolymorphicPointerDowncast(memoryManager)); +} + +IBackendInternal::IWorkloadFactoryPtr TosaRefBackend::CreateWorkloadFactory( + class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const +{ + auto memoryManager = std::make_shared(); + + tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager); + + auto factory = std::make_unique(memoryManager); + // Register copy and import factory pair + tensorHandleFactoryRegistry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId()); + // Register the factory + tensorHandleFactoryRegistry.RegisterFactory(std::move(factory)); + + return std::make_unique(PolymorphicPointerDowncast(memoryManager)); +} + +IBackendInternal::IBackendContextPtr TosaRefBackend::CreateBackendContext(const IRuntime::CreationOptions&) const +{ + return IBackendContextPtr{}; +} + +IBackendInternal::IBackendProfilingContextPtr TosaRefBackend::CreateBackendProfilingContext( + const IRuntime::CreationOptions&, IBackendProfilingPtr&) +{ + return IBackendProfilingContextPtr{}; +} + +IBackendInternal::IMemoryManagerUniquePtr TosaRefBackend::CreateMemoryManager() const +{ + return std::make_unique(); +} + +IBackendInternal::ILayerSupportSharedPtr TosaRefBackend::GetLayerSupport() const +{ + static ILayerSupportSharedPtr layerSupport{new TosaRefLayerSupport}; + return layerSupport; +} + +OptimizationViews TosaRefBackend::OptimizeSubgraphView(const SubgraphView& subgraph, + const ModelOptions& modelOptions) const +{ + OptimizationViews optimizationViews(modelOptions); + optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); + + return optimizationViews; +} + +std::vector TosaRefBackend::GetHandleFactoryPreferences() const +{ + return std::vector { TosaRefTensorHandleFactory::GetIdStatic() }; +} + +void TosaRefBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) +{ + auto memoryManager = std::make_shared(); + + registry.RegisterMemoryManager(memoryManager); + + auto factory = std::make_unique(memoryManager); + + // Register copy and import factory pair + registry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId()); + // Register the factory + registry.RegisterFactory(std::move(factory)); +} + +std::unique_ptr TosaRefBackend::GetDefaultAllocator() const +{ + return std::make_unique(); +} + +} // namespace armnn -- cgit v1.2.1