From 5caf907efc31e774f8afde54b17a5596477772f6 Mon Sep 17 00:00:00 2001 From: Aron Virginas-Tar Date: Wed, 14 Nov 2018 18:35:18 +0000 Subject: IVGCVSW-2136: Remove memory management methods from workload factories Change-Id: Idc0f94590566ac362f7e1d1999361d025cc2f67a --- src/backends/neon/NeonWorkloadFactory.cpp | 10 --- src/backends/neon/NeonWorkloadFactory.hpp | 4 -- src/backends/neon/test/NeonCreateWorkloadTests.cpp | 80 ++++++++++++++-------- src/backends/neon/test/NeonLayerSupportTests.cpp | 9 ++- .../neon/test/NeonOptimizedNetworkTests.cpp | 4 +- src/backends/neon/test/NeonTimerTest.cpp | 3 +- .../neon/test/NeonWorkloadFactoryHelper.hpp | 14 ++-- 7 files changed, 71 insertions(+), 53 deletions(-) (limited to 'src/backends/neon') diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp index 65844476e4..ef90240c72 100644 --- a/src/backends/neon/NeonWorkloadFactory.cpp +++ b/src/backends/neon/NeonWorkloadFactory.cpp @@ -282,14 +282,4 @@ std::unique_ptr NeonWorkloadFactory::CreateBatchToSpaceNd(const Batch return MakeWorkloadHelper(descriptor, info); } -void NeonWorkloadFactory::Release() -{ - m_MemoryManager->Release(); -} - -void NeonWorkloadFactory::Acquire() -{ - m_MemoryManager->Acquire(); -} - } // namespace armnn diff --git a/src/backends/neon/NeonWorkloadFactory.hpp b/src/backends/neon/NeonWorkloadFactory.hpp index d5444f5828..8d330634cb 100644 --- a/src/backends/neon/NeonWorkloadFactory.hpp +++ b/src/backends/neon/NeonWorkloadFactory.hpp @@ -130,10 +130,6 @@ public: virtual std::unique_ptr CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; - virtual void Release() override; - - virtual void Acquire() override; - private: mutable std::shared_ptr m_MemoryManager; }; diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp index 07953bf86f..61160e2195 100644 --- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp +++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp @@ -58,7 +58,9 @@ template static void NeonCreateActivationWorkloadTest() { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateActivationWorkloadTest(factory, graph); // Checks that inputs/outputs are as we expect them (see definition of CreateActivationWorkloadTest). @@ -88,7 +90,9 @@ template (factory, graph); DescriptorType queueDescriptor = workload->GetData(); @@ -157,8 +161,10 @@ BOOST_AUTO_TEST_CASE(CreateMultiplicationFloatWorkload) template static void NeonCreateBatchNormalizationWorkloadTest(DataLayout dataLayout) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateBatchNormalizationWorkloadTest (factory, graph, dataLayout); @@ -199,10 +205,11 @@ BOOST_AUTO_TEST_CASE(CreateBatchNormalizationFloatNhwcWorkload) template static void NeonCreateConvolution2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateConvolution2dWorkloadTest(factory, graph, dataLayout); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateConvolution2dWorkloadTest(factory, graph, dataLayout); TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{2, 3, 8, 16} : TensorShape{2, 8, 16, 3}; TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{2, 2, 2, 10} : TensorShape{2, 2, 10, 2}; @@ -241,7 +248,8 @@ template static void NeonCreateDepthWiseConvolutionWorkloadTest(DataLayout dataLayout) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateDepthwiseConvolution2dWorkloadTest(factory, graph, dataLayout); @@ -277,10 +285,11 @@ BOOST_AUTO_TEST_CASE(CreateDepthWiseConvolution2dFloat16NhwcWorkload) template static void NeonCreateFullyConnectedWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateFullyConnectedWorkloadTest(factory, graph); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateFullyConnectedWorkloadTest(factory, graph); // Checks that outputs and inputs are as we expect them (see definition of CreateFullyConnectedWorkloadTest). FullyConnectedQueueDescriptor queueDescriptor = workload->GetData(); @@ -306,7 +315,9 @@ template static void NeonCreateNormalizationWorkloadTest(DataLayout dataLayout) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateNormalizationWorkloadTest(factory, graph, dataLayout); // Checks that outputs and inputs are as we expect them (see definition of CreateNormalizationWorkloadTest). @@ -347,10 +358,11 @@ BOOST_AUTO_TEST_CASE(CreateNormalizationFloatNhwcWorkload) template static void NeonCreatePooling2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreatePooling2dWorkloadTest - (factory, graph, dataLayout); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreatePooling2dWorkloadTest(factory, graph, dataLayout); TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 2, 5, 5} : TensorShape{3, 5, 5, 2}; TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 2, 2, 4} : TensorShape{3, 2, 4, 2}; @@ -393,9 +405,11 @@ BOOST_AUTO_TEST_CASE(CreatePooling2dUint8NhwcWorkload) template static void NeonCreateReshapeWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateReshapeWorkloadTest(factory, graph); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateReshapeWorkloadTest(factory, graph); // Checks that outputs and inputs are as we expect them (see definition of CreateReshapeWorkloadTest). ReshapeQueueDescriptor queueDescriptor = workload->GetData(); @@ -425,8 +439,10 @@ BOOST_AUTO_TEST_CASE(CreateReshapeUint8Workload) template static void NeonCreateSoftmaxWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateSoftmaxWorkloadTest(factory, graph); // Checks that outputs and inputs are as we expect them (see definition of CreateSoftmaxWorkloadTest). @@ -452,7 +468,9 @@ BOOST_AUTO_TEST_CASE(CreateSoftmaxFloatWorkload) BOOST_AUTO_TEST_CASE(CreateSplitterWorkload) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateSplitterWorkloadTest(factory, graph); // Checks that outputs are as we expect them (see definition of CreateSplitterWorkloadTest). @@ -479,7 +497,8 @@ BOOST_AUTO_TEST_CASE(CreateSplitterMerger) // of the merger. Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); auto workloads = CreateSplitterMergerWorkloadTest wlSplitter; std::unique_ptr wlActiv0_0; std::unique_ptr wlActiv0_1; @@ -544,7 +565,8 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs) BOOST_AUTO_TEST_CASE(CreateMemCopyWorkloadsNeon) { - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); CreateMemCopyWorkloads(factory); } @@ -552,7 +574,9 @@ template (factory, graph, dataLayout); diff --git a/src/backends/neon/test/NeonLayerSupportTests.cpp b/src/backends/neon/test/NeonLayerSupportTests.cpp index 56955432b6..c6d2731fd2 100644 --- a/src/backends/neon/test/NeonLayerSupportTests.cpp +++ b/src/backends/neon/test/NeonLayerSupportTests.cpp @@ -22,19 +22,22 @@ BOOST_AUTO_TEST_SUITE(NeonLayerSupport) BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat16Neon) { - armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat32Neon) { - armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } BOOST_AUTO_TEST_CASE(IsLayerSupportedUint8Neon) { - armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } diff --git a/src/backends/neon/test/NeonOptimizedNetworkTests.cpp b/src/backends/neon/test/NeonOptimizedNetworkTests.cpp index b6f479804a..09e231bfd7 100644 --- a/src/backends/neon/test/NeonOptimizedNetworkTests.cpp +++ b/src/backends/neon/test/NeonOptimizedNetworkTests.cpp @@ -33,7 +33,9 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateCpuAccDeviceSupportLayerNoFallback) armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec()); BOOST_CHECK(optNet); // validate workloads - armnn::NeonWorkloadFactory fact = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory fact = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + for (auto&& layer : static_cast(optNet.get())->GetGraph()) { BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc); diff --git a/src/backends/neon/test/NeonTimerTest.cpp b/src/backends/neon/test/NeonTimerTest.cpp index a2bf4a95e5..3503c961f5 100644 --- a/src/backends/neon/test/NeonTimerTest.cpp +++ b/src/backends/neon/test/NeonTimerTest.cpp @@ -37,7 +37,8 @@ BOOST_AUTO_TEST_CASE(NeonTimerGetName) BOOST_AUTO_TEST_CASE(NeonTimerMeasure) { - NeonWorkloadFactory workloadFactory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory workloadFactory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); unsigned int inputWidth = 4000u; unsigned int inputHeight = 5000u; diff --git a/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp b/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp index bcf9c57a16..7a6df11d7f 100644 --- a/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp +++ b/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp @@ -9,10 +9,9 @@ #include #include +#include #include -#include - #include namespace @@ -21,12 +20,15 @@ namespace template<> struct WorkloadFactoryHelper { - static armnn::NeonWorkloadFactory GetFactory() + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() { - armnn::IBackendInternal::IMemoryManagerSharedPtr memoryManager = - std::make_shared(std::make_unique(), - armnn::BaseMemoryManager::MemoryAffinity::Offset); + armnn::NeonBackend backend; + return backend.CreateMemoryManager(); + } + static armnn::NeonWorkloadFactory GetFactory( + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + { return armnn::NeonWorkloadFactory( boost::polymorphic_pointer_downcast(memoryManager)); } -- cgit v1.2.1