From b8d771ac2e6f847a64b3b203591c5b1c3e198d3a Mon Sep 17 00:00:00 2001 From: Narumol Prangnawarat Date: Fri, 14 Aug 2020 11:51:12 +0100 Subject: IVGCVSW-5012 Enable zero copy for Neon * Allow memory import if padding is not required in Neon * AddMockImportBackend for fallback tests * Refactor GraphUtils * Memory import unit tests * Fallback unit tests Signed-off-by: Narumol Prangnawarat Change-Id: Ic2e141e12774bf6d915e77745b6f6d2d83d9b82d --- .../test/mockBackend/MockImportBackend.cpp | 115 +++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 src/backends/backendsCommon/test/mockBackend/MockImportBackend.cpp (limited to 'src/backends/backendsCommon/test/mockBackend/MockImportBackend.cpp') diff --git a/src/backends/backendsCommon/test/mockBackend/MockImportBackend.cpp b/src/backends/backendsCommon/test/mockBackend/MockImportBackend.cpp new file mode 100644 index 0000000000..ebe94348fc --- /dev/null +++ b/src/backends/backendsCommon/test/mockBackend/MockImportBackend.cpp @@ -0,0 +1,115 @@ +// +// Copyright © 2020 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "MockImportBackend.hpp" +#include "MockImportLayerSupport.hpp" + +#include +#include +#include +#include + +#include +#include + +#include + +namespace armnn +{ + +MockImportBackendInitialiser::MockImportBackendInitialiser() +{ + BackendRegistryInstance().Register(MockImportBackend::GetIdStatic(), + []() + { + return IBackendInternalUniquePtr(new MockImportBackend); + }); +} + +MockImportBackendInitialiser::~MockImportBackendInitialiser() +{ + try + { + BackendRegistryInstance().Deregister(MockImportBackend::GetIdStatic()); + } + catch (...) + { + std::cerr << "could not deregister mock import backend" << std::endl; + } +} + +const BackendId& MockImportBackend::GetIdStatic() +{ + static const BackendId s_Id{ MockImportBackendId() }; + return s_Id; +} + +IBackendInternal::IWorkloadFactoryPtr MockImportBackend::CreateWorkloadFactory( + const IBackendInternal::IMemoryManagerSharedPtr& memoryManager) const +{ + return std::make_unique(PolymorphicPointerDowncast(memoryManager)); +} + +IBackendInternal::IWorkloadFactoryPtr MockImportBackend::CreateWorkloadFactory( + class TensorHandleFactoryRegistry& tensorHandleFactoryRegistry) const +{ + auto memoryManager = std::make_shared(); + + tensorHandleFactoryRegistry.RegisterMemoryManager(memoryManager); + tensorHandleFactoryRegistry.RegisterFactory(std::make_unique(memoryManager)); + + return std::make_unique(PolymorphicPointerDowncast(memoryManager)); +} + +IBackendInternal::IBackendContextPtr MockImportBackend::CreateBackendContext(const IRuntime::CreationOptions&) const +{ + return IBackendContextPtr{}; +} + +IBackendInternal::IBackendProfilingContextPtr MockImportBackend::CreateBackendProfilingContext( + const IRuntime::CreationOptions&, IBackendProfilingPtr&) +{ + return IBackendProfilingContextPtr{}; +} + +IBackendInternal::IMemoryManagerUniquePtr MockImportBackend::CreateMemoryManager() const +{ + return std::make_unique(); +} + +IBackendInternal::Optimizations MockImportBackend::GetOptimizations() const +{ + return Optimizations{}; +} + +IBackendInternal::ILayerSupportSharedPtr MockImportBackend::GetLayerSupport() const +{ + static ILayerSupportSharedPtr layerSupport{new MockImportLayerSupport}; + return layerSupport; +} + +OptimizationViews MockImportBackend::OptimizeSubgraphView(const SubgraphView& subgraph) const +{ + OptimizationViews optimizationViews; + + optimizationViews.AddUntouchedSubgraph(SubgraphView(subgraph)); + + return optimizationViews; +} + +std::vector MockImportBackend::GetHandleFactoryPreferences() const +{ + return std::vector { RefTensorHandleFactory::GetIdStatic() }; +} + +void MockImportBackend::RegisterTensorHandleFactories(class TensorHandleFactoryRegistry& registry) +{ + auto memoryManager = std::make_shared(); + + registry.RegisterMemoryManager(memoryManager); + registry.RegisterFactory(std::make_unique(memoryManager)); +} + +} // namespace armnn -- cgit v1.2.1