diff options
author | Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> | 2018-11-14 18:35:18 +0000 |
---|---|---|
committer | Aron Virginas-Tar <Aron.Virginas-Tar@arm.com> | 2018-11-15 10:38:19 +0000 |
commit | 5caf907efc31e774f8afde54b17a5596477772f6 (patch) | |
tree | 9fcdfe44ccf7c96e5088a2cef06b7d74dfd3221c /src/backends/neon | |
parent | dd9d8ca997cb6c63677249350247e9f44525104c (diff) | |
download | armnn-5caf907efc31e774f8afde54b17a5596477772f6.tar.gz |
IVGCVSW-2136: Remove memory management methods from workload factories
Change-Id: Idc0f94590566ac362f7e1d1999361d025cc2f67a
Diffstat (limited to 'src/backends/neon')
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.cpp | 10 | ||||
-rw-r--r-- | src/backends/neon/NeonWorkloadFactory.hpp | 4 | ||||
-rw-r--r-- | src/backends/neon/test/NeonCreateWorkloadTests.cpp | 80 | ||||
-rw-r--r-- | src/backends/neon/test/NeonLayerSupportTests.cpp | 9 | ||||
-rw-r--r-- | src/backends/neon/test/NeonOptimizedNetworkTests.cpp | 4 | ||||
-rw-r--r-- | src/backends/neon/test/NeonTimerTest.cpp | 3 | ||||
-rw-r--r-- | src/backends/neon/test/NeonWorkloadFactoryHelper.hpp | 14 |
7 files changed, 71 insertions, 53 deletions
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<IWorkload> NeonWorkloadFactory::CreateBatchToSpaceNd(const Batch return MakeWorkloadHelper<NullWorkload, NullWorkload>(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<IWorkload> CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& Info) const override; - virtual void Release() override; - - virtual void Acquire() override; - private: mutable std::shared_ptr<NeonMemoryManager> 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 <typename armnn::DataType DataType> static void NeonCreateActivationWorkloadTest() { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateActivationWorkloadTest<NeonActivationWorkload, DataType>(factory, graph); // Checks that inputs/outputs are as we expect them (see definition of CreateActivationWorkloadTest). @@ -88,7 +90,9 @@ template <typename WorkloadType, static void NeonCreateArithmethicWorkloadTest() { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateArithmeticWorkloadTest<WorkloadType, DescriptorType, LayerType, DataType>(factory, graph); DescriptorType queueDescriptor = workload->GetData(); @@ -157,8 +161,10 @@ BOOST_AUTO_TEST_CASE(CreateMultiplicationFloatWorkload) template <typename BatchNormalizationWorkloadType, typename armnn::DataType DataType> static void NeonCreateBatchNormalizationWorkloadTest(DataLayout dataLayout) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateBatchNormalizationWorkloadTest<BatchNormalizationWorkloadType, DataType> (factory, graph, dataLayout); @@ -199,10 +205,11 @@ BOOST_AUTO_TEST_CASE(CreateBatchNormalizationFloatNhwcWorkload) template <typename armnn::DataType DataType> static void NeonCreateConvolution2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateConvolution2dWorkloadTest<NeonConvolution2dWorkload, - DataType>(factory, graph, dataLayout); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateConvolution2dWorkloadTest<NeonConvolution2dWorkload, DataType>(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 <typename armnn::DataType DataType> static void NeonCreateDepthWiseConvolutionWorkloadTest(DataLayout dataLayout) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateDepthwiseConvolution2dWorkloadTest<NeonDepthwiseConvolutionWorkload, DataType>(factory, graph, dataLayout); @@ -277,10 +285,11 @@ BOOST_AUTO_TEST_CASE(CreateDepthWiseConvolution2dFloat16NhwcWorkload) template <typename FullyConnectedWorkloadType, typename armnn::DataType DataType> static void NeonCreateFullyConnectedWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateFullyConnectedWorkloadTest<FullyConnectedWorkloadType, - DataType>(factory, graph); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateFullyConnectedWorkloadTest<FullyConnectedWorkloadType, DataType>(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 <typename NormalizationWorkloadType, typename armnn::DataType DataType> static void NeonCreateNormalizationWorkloadTest(DataLayout dataLayout) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(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 <typename armnn::DataType DataType> static void NeonCreatePooling2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW) { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreatePooling2dWorkloadTest<NeonPooling2dWorkload, DataType> - (factory, graph, dataLayout); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreatePooling2dWorkloadTest<NeonPooling2dWorkload, DataType>(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 <typename armnn::DataType DataType> static void NeonCreateReshapeWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); - auto workload = CreateReshapeWorkloadTest<NeonReshapeWorkload, DataType>(factory, graph); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + + auto workload = CreateReshapeWorkloadTest<NeonReshapeWorkload, DataType>(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 <typename SoftmaxWorkloadType, typename armnn::DataType DataType> static void NeonCreateSoftmaxWorkloadTest() { - Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + Graph graph; + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateSoftmaxWorkloadTest<SoftmaxWorkloadType, DataType>(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<NeonSplitterWorkload, DataType::Float32>(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<NeonSplitterWorkload, NeonMergerWorkload, @@ -510,7 +529,9 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs) // We created a splitter with two outputs. That each of those outputs is used by two different activation layers Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + std::unique_ptr<NeonSplitterWorkload> wlSplitter; std::unique_ptr<NeonActivationWorkload> wlActiv0_0; std::unique_ptr<NeonActivationWorkload> 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<INeonTensorHandle>(factory); } @@ -552,7 +574,9 @@ template <typename L2NormalizationWorkloadType, typename armnn::DataType DataTyp static void NeonCreateL2NormalizationWorkloadTest(DataLayout dataLayout) { Graph graph; - NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateL2NormalizationWorkloadTest<L2NormalizationWorkloadType, DataType>(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<armnn::NeonWorkloadFactory, armnn::DataType::Float16>(&factory); } BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat32Neon) { - armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests<armnn::NeonWorkloadFactory, armnn::DataType::Float32>(&factory); } BOOST_AUTO_TEST_CASE(IsLayerSupportedUint8Neon) { - armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory(); + armnn::NeonWorkloadFactory factory = + NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests<armnn::NeonWorkloadFactory, armnn::DataType::QuantisedAsymm8>(&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<armnn::OptimizedNetwork*>(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 <backendsCommon/IMemoryManager.hpp> #include <backendsCommon/test/WorkloadFactoryHelper.hpp> +#include <neon/NeonBackend.hpp> #include <neon/NeonWorkloadFactory.hpp> -#include <arm_compute/runtime/Allocator.h> - #include <boost/polymorphic_pointer_cast.hpp> namespace @@ -21,12 +20,15 @@ namespace template<> struct WorkloadFactoryHelper<armnn::NeonWorkloadFactory> { - static armnn::NeonWorkloadFactory GetFactory() + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() { - armnn::IBackendInternal::IMemoryManagerSharedPtr memoryManager = - std::make_shared<armnn::NeonMemoryManager>(std::make_unique<arm_compute::Allocator>(), - 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<armnn::NeonMemoryManager>(memoryManager)); } |