diff options
author | Francis Murtagh <francis.murtagh@arm.com> | 2022-08-12 13:54:17 +0100 |
---|---|---|
committer | Nikhil Raj <nikhil.raj@arm.com> | 2022-09-07 14:08:58 +0100 |
commit | 9270d9e52fc1d946cf543c11df71bcc1f7b38544 (patch) | |
tree | 4b763ed4d200f76e170462a1b84a476d1c73a648 /src/backends/tosaReference/TosaRefBackend.cpp | |
parent | ce8204a528b3973b2dbf258095ab048a061263ea (diff) | |
download | armnn-9270d9e52fc1d946cf543c11df71bcc1f7b38544.tar.gz |
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
Diffstat (limited to 'src/backends/tosaReference/TosaRefBackend.cpp')
-rw-r--r-- | src/backends/tosaReference/TosaRefBackend.cpp | 107 |
1 files changed, 107 insertions, 0 deletions
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 <armnn/BackendRegistry.hpp> +#include <armnn/backends/IBackendContext.hpp> +#include <armnn/backends/IMemoryManager.hpp> +#include <armnn/utility/PolymorphicDowncast.hpp> +#include <backendsCommon/DefaultAllocator.hpp> +#include <backendsCommon/SubgraphUtils.hpp> + +#include <Optimizer.hpp> + +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<TosaRefWorkloadFactory>(PolymorphicPointerDowncast<TosaRefMemoryManager>(memoryManager)); +} + +IBackendInternal::IWorkloadFactoryPtr TosaRefBackend::CreateWorkloadFactory( + class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const +{ + auto memoryManager = std::make_shared<TosaRefMemoryManager>(); + + tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager); + + auto factory = std::make_unique<TosaRefTensorHandleFactory>(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<TosaRefWorkloadFactory>(PolymorphicPointerDowncast<TosaRefMemoryManager>(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<TosaRefMemoryManager>(); +} + +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<ITensorHandleFactory::FactoryId> TosaRefBackend::GetHandleFactoryPreferences() const +{ + return std::vector<ITensorHandleFactory::FactoryId> { TosaRefTensorHandleFactory::GetIdStatic() }; +} + +void TosaRefBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) +{ + auto memoryManager = std::make_shared<TosaRefMemoryManager>(); + + registry.RegisterMemoryManager(memoryManager); + + auto factory = std::make_unique<TosaRefTensorHandleFactory>(memoryManager); + + // Register copy and import factory pair + registry.RegisterCopyAndImportFactoryPair(factory->GetId(), factory->GetId()); + // Register the factory + registry.RegisterFactory(std::move(factory)); +} + +std::unique_ptr<ICustomAllocator> TosaRefBackend::GetDefaultAllocator() const +{ + return std::make_unique<DefaultAllocator>(); +} + +} // namespace armnn |