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/armnn/LoadedNetwork.cpp | 21 +- src/armnn/LoadedNetwork.hpp | 6 +- src/armnn/test/UnitTests.hpp | 13 +- src/backends/aclCommon/test/MemCopyTestImpl.hpp | 12 +- src/backends/backendsCommon/WorkloadFactory.hpp | 6 - .../backendsCommon/test/ActivationTestImpl.hpp | 173 +- .../backendsCommon/test/BatchNormTestImpl.hpp | 27 +- .../backendsCommon/test/Conv2dTestImpl.hpp | 182 ++- .../test/ConvertFp16ToFp32TestImpl.hpp | 7 +- .../test/ConvertFp32ToFp16TestImpl.hpp | 7 +- .../backendsCommon/test/FullyConnectedTestImpl.hpp | 32 +- src/backends/backendsCommon/test/LayerTests.cpp | 1693 +++++++++++++------- src/backends/backendsCommon/test/LayerTests.hpp | 1238 ++++++++++---- src/backends/backendsCommon/test/LstmTestImpl.hpp | 27 +- src/backends/backendsCommon/test/NormTestImpl.hpp | 43 +- .../backendsCommon/test/PermuteTestImpl.hpp | 38 +- .../backendsCommon/test/Pooling2dTestImpl.hpp | 255 +-- .../backendsCommon/test/ReshapeTestImpl.hpp | 21 +- .../backendsCommon/test/SoftmaxTestImpl.hpp | 19 +- .../backendsCommon/test/SpaceToBatchNdTestImpl.hpp | 66 +- .../backendsCommon/test/SplitterTestImpl.hpp | 20 +- .../backendsCommon/test/WorkloadTestUtils.hpp | 34 +- src/backends/cl/ClWorkloadFactory.cpp | 246 +-- src/backends/cl/ClWorkloadFactory.hpp | 4 - src/backends/cl/test/ClCreateWorkloadTests.cpp | 75 +- src/backends/cl/test/ClLayerSupportTests.cpp | 9 +- src/backends/cl/test/ClOptimizedNetworkTests.cpp | 3 +- src/backends/cl/test/ClWorkloadFactoryHelper.hpp | 13 +- src/backends/cl/test/OpenClTimerTest.cpp | 3 +- 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 +- .../reference/test/RefWorkloadFactoryHelper.hpp | 9 +- 37 files changed, 2830 insertions(+), 1596 deletions(-) diff --git a/src/armnn/LoadedNetwork.cpp b/src/armnn/LoadedNetwork.cpp index 24d119c260..3464fb0277 100644 --- a/src/armnn/LoadedNetwork.cpp +++ b/src/armnn/LoadedNetwork.cpp @@ -92,10 +92,11 @@ LoadedNetwork::LoadedNetwork(std::unique_ptr net) auto createBackend = BackendRegistryInstance().GetFactory(backend); auto it = m_Backends.emplace(std::make_pair(backend, createBackend())); - auto memoryManager = it.first->second->CreateMemoryManager(); - auto workloadFactory = it.first->second->CreateWorkloadFactory(std::move(memoryManager)); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = it.first->second->CreateMemoryManager(); + auto workloadFactory = it.first->second->CreateWorkloadFactory(memoryManager); - m_WorkloadFactories.emplace(std::make_pair(backend, std::move(workloadFactory))); + m_WorkloadFactories.emplace(std::make_pair(backend, + std::make_pair(std::move(workloadFactory), memoryManager))); } layer->CreateTensorHandles(m_OptimizedNetwork->GetGraph(), GetWorkloadFactory(*layer)); } @@ -182,7 +183,7 @@ const IWorkloadFactory& LoadedNetwork::GetWorkloadFactory(const Layer& layer) co CHECK_LOCATION()); } - workloadFactory = it->second.get(); + workloadFactory = it->second.first.get(); BOOST_ASSERT_MSG(workloadFactory, "No workload factory"); @@ -416,7 +417,11 @@ void LoadedNetwork::AllocateWorkingMemory() } for (auto&& workloadFactory : m_WorkloadFactories) { - workloadFactory.second->Acquire(); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = workloadFactory.second.second; + if (memoryManager) + { + memoryManager->Acquire(); + } } m_IsWorkingMemAllocated = true; } @@ -431,7 +436,11 @@ void LoadedNetwork::FreeWorkingMemory() // Informs the memory managers to release memory in it's respective memory group for (auto&& workloadFactory : m_WorkloadFactories) { - workloadFactory.second->Release(); + IBackendInternal::IMemoryManagerSharedPtr memoryManager = workloadFactory.second.second; + if (memoryManager) + { + memoryManager->Release(); + } } m_IsWorkingMemAllocated = false; } diff --git a/src/armnn/LoadedNetwork.hpp b/src/armnn/LoadedNetwork.hpp index 65dd4ec25b..03a741fb75 100644 --- a/src/armnn/LoadedNetwork.hpp +++ b/src/armnn/LoadedNetwork.hpp @@ -62,7 +62,11 @@ private: const IWorkloadFactory& GetWorkloadFactory(const Layer& layer) const; using BackendPtrMap = std::unordered_map; - using WorkloadFactoryMap = std::unordered_map; + + using WorkloadFactoryWithMemoryManager = + std::pair; + + using WorkloadFactoryMap = std::unordered_map; BackendPtrMap m_Backends; WorkloadFactoryMap m_WorkloadFactories; diff --git a/src/armnn/test/UnitTests.hpp b/src/armnn/test/UnitTests.hpp index 44b737cae4..f489ca030c 100644 --- a/src/armnn/test/UnitTests.hpp +++ b/src/armnn/test/UnitTests.hpp @@ -66,8 +66,10 @@ void RunTestFunction(const char* testName, TFuncPtr testFunction, Args... args) std::unique_ptr profiler = std::make_unique(); armnn::ProfilerManager::GetInstance().RegisterProfiler(profiler.get()); - FactoryType workloadFactory = WorkloadFactoryHelper::GetFactory(); - auto testResult = (*testFunction)(workloadFactory, args...); + auto memoryManager = WorkloadFactoryHelper::GetMemoryManager(); + FactoryType workloadFactory = WorkloadFactoryHelper::GetFactory(memoryManager); + + auto testResult = (*testFunction)(workloadFactory, memoryManager, args...); CompareTestResultIfSupported(testName, testResult); } @@ -80,9 +82,12 @@ void RunTestFunction(const char* testName, TFuncPtr testFunction, Args... args) template void CompareRefTestFunction(const char* testName, TFuncPtr testFunction, Args... args) { - FactoryType workloadFactory = WorkloadFactoryHelper::GetFactory(); + auto memoryManager = WorkloadFactoryHelper::GetMemoryManager(); + FactoryType workloadFactory = WorkloadFactoryHelper::GetFactory(memoryManager); + armnn::RefWorkloadFactory refWorkloadFactory; - auto testResult = (*testFunction)(workloadFactory, refWorkloadFactory, args...); + + auto testResult = (*testFunction)(workloadFactory, memoryManager, refWorkloadFactory, args...); CompareTestResultIfSupported(testName, testResult); } diff --git a/src/backends/aclCommon/test/MemCopyTestImpl.hpp b/src/backends/aclCommon/test/MemCopyTestImpl.hpp index 763a3f73aa..4247cc5ef4 100644 --- a/src/backends/aclCommon/test/MemCopyTestImpl.hpp +++ b/src/backends/aclCommon/test/MemCopyTestImpl.hpp @@ -4,6 +4,8 @@ // #pragma once +#include + #include #include #include @@ -76,8 +78,14 @@ LayerTestResult MemCopyTest(armnn::IWorkloadFactory& srcWorkloadFactor template LayerTestResult MemCopyTest(bool withSubtensors) { - SrcWorkloadFactory srcWorkloadFactory = WorkloadFactoryHelper::GetFactory(); - DstWorkloadFactory dstWorkloadFactory = WorkloadFactoryHelper::GetFactory(); + armnn::IBackendInternal::IMemoryManagerSharedPtr srcMemoryManager = + WorkloadFactoryHelper::GetMemoryManager(); + + armnn::IBackendInternal::IMemoryManagerSharedPtr dstMemoryManager = + WorkloadFactoryHelper::GetMemoryManager(); + + SrcWorkloadFactory srcWorkloadFactory = WorkloadFactoryHelper::GetFactory(srcMemoryManager); + DstWorkloadFactory dstWorkloadFactory = WorkloadFactoryHelper::GetFactory(dstMemoryManager); return MemCopyTest(srcWorkloadFactory, dstWorkloadFactory, withSubtensors); } diff --git a/src/backends/backendsCommon/WorkloadFactory.hpp b/src/backends/backendsCommon/WorkloadFactory.hpp index e3be9f501f..cd1ca25bb2 100644 --- a/src/backends/backendsCommon/WorkloadFactory.hpp +++ b/src/backends/backendsCommon/WorkloadFactory.hpp @@ -25,12 +25,6 @@ public: virtual const BackendId& GetBackendId() const = 0; - /// Inform the memory manager to release the memory - virtual void Release() { } - - /// Inform the memory manager to acquire memory - virtual void Acquire() { } - static bool IsLayerSupported(const BackendId& backendId, const IConnectableLayer& layer, Optional dataType, diff --git a/src/backends/backendsCommon/test/ActivationTestImpl.hpp b/src/backends/backendsCommon/test/ActivationTestImpl.hpp index 3b3ee9361c..46c700ce02 100644 --- a/src/backends/backendsCommon/test/ActivationTestImpl.hpp +++ b/src/backends/backendsCommon/test/ActivationTestImpl.hpp @@ -12,6 +12,7 @@ #include #include +#include #include #include @@ -19,12 +20,21 @@ #include template -LayerTestResult BoundedReLuTestCommon(armnn::IWorkloadFactory& workloadFactory, - float upperBound, float lowerBound, - float inputScale, int32_t inputOffset, float outputScale, int32_t outputOffset, - const std::vector& inputData, const std::vector& outputExpectedData, - unsigned int inputWidth, unsigned int inputHeight, - unsigned int inputChannels, unsigned int inputBatchSize) +LayerTestResult BoundedReLuTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float upperBound, + float lowerBound, + float inputScale, + int32_t inputOffset, + float outputScale, + int32_t outputOffset, + const std::vector& inputData, + const std::vector& outputExpectedData, + unsigned int inputWidth, + unsigned int inputHeight, + unsigned int inputChannels, + unsigned int inputBatchSize) { unsigned int outputWidth = inputWidth; unsigned int outputHeight = inputHeight; @@ -79,7 +89,9 @@ LayerTestResult BoundedReLuTestCommon(armnn::IWorkloadFactory& workloadFac return result; } -LayerTestResult BoundedReLuUpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BoundedReLuUpperAndLowerBoundTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int inputWidth = 4u; unsigned int inputHeight = 5u; @@ -103,11 +115,14 @@ LayerTestResult BoundedReLuUpperAndLowerBoundTest(armnn::IWorkloadFact 0.999f, 1.0f, 0.89f, 1.0f, }; - return BoundedReLuTestCommon(workloadFactory, 1.0f, -1.0f, 1.0f, 0, 1.0f, 0, input, output, - inputWidth, inputHeight, inputChannels, inputBatchSize); + return BoundedReLuTestCommon( + workloadFactory, memoryManager, 1.0f, -1.0f, 1.0f, 0, 1.0f, 0, input, output, + inputWidth, inputHeight, inputChannels, inputBatchSize); } -LayerTestResult BoundedReLuUpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BoundedReLuUpperBoundOnlyTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int inputWidth = 4u; unsigned int inputHeight = 5u; @@ -131,11 +146,14 @@ LayerTestResult BoundedReLuUpperBoundOnlyTest(armnn::IWorkloadFactory& 0.999f, 1.2f, 0.89f, 6.0f, }; - return BoundedReLuTestCommon(workloadFactory, 6.0f, 0.0f, 1.0f, 0, 1.0f, 0, input, output, - inputWidth, inputHeight, inputChannels, inputBatchSize); + return BoundedReLuTestCommon( + workloadFactory, memoryManager, 6.0f, 0.0f, 1.0f, 0, 1.0f, 0, input, output, + inputWidth, inputHeight, inputChannels, inputBatchSize); } -LayerTestResult BoundedReLuUint8UpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BoundedReLuUint8UpperBoundOnlyTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int inputWidth = 3u; unsigned int inputHeight = 2u; @@ -158,13 +176,15 @@ LayerTestResult BoundedReLuUint8UpperBoundOnlyTest(armnn::IWorkloadF float outputScale = 6.0f / 255.0f; int32_t outputOffset = 0; - return BoundedReLuTestCommon(workloadFactory, 6.0f, 0.0f, + return BoundedReLuTestCommon(workloadFactory, memoryManager, 6.0f, 0.0f, inputScale, inputOffset, outputScale, outputOffset, input, output, inputWidth, inputHeight, inputChannels, inputBatchSize); } -LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int inputWidth = 3u; unsigned int inputHeight = 2u; @@ -185,7 +205,7 @@ LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest(armnn::IWorkl int32_t inputOffset = 112; float inputScale = 0.0125f; - return BoundedReLuTestCommon(workloadFactory, 1.0f, -1.0f, + return BoundedReLuTestCommon(workloadFactory, memoryManager, 1.0f, -1.0f, inputScale, inputOffset, inputScale, inputOffset, // Input/output scale & offset same. input, output, inputWidth, inputHeight, inputChannels, inputBatchSize); @@ -219,10 +239,12 @@ struct BoundedReLuRandomInputTestTraits } }; -boost::multi_array BoundedReLuRandomInputTest(armnn::IWorkloadFactory& workloadFactory, - float lowerBound, - float upperBound, - const armnn::ActivationDescriptor& activationDescriptor) +boost::multi_array BoundedReLuRandomInputTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float lowerBound, + float upperBound, + const armnn::ActivationDescriptor& activationDescriptor) { const armnn::TensorInfo inputTensorInfo = BoundedReLuRandomInputTestTraits::GetInputTensorInfo(); const armnn::TensorInfo outputTensorInfo = BoundedReLuRandomInputTestTraits::GetOutputTensorInfo(); @@ -259,10 +281,12 @@ boost::multi_array BoundedReLuRandomInputTest(armnn::IWorkloadFactory& } // namespace -LayerTestResult CompareBoundedReLuTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& otherWorkloadFactory, - float upperBound, - float lowerBound) +LayerTestResult CompareBoundedReLuTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + float upperBound, + float lowerBound) { LayerTestResult result(BoundedReLuRandomInputTestTraits::GetOutputTensorInfo()); @@ -271,16 +295,20 @@ LayerTestResult CompareBoundedReLuTest(armnn::IWorkloadFactory& worklo activationDescriptor.m_A = upperBound; activationDescriptor.m_B = lowerBound; - result.output = BoundedReLuRandomInputTest(workloadFactory, 0.0f, upperBound, activationDescriptor); - result.outputExpected = BoundedReLuRandomInputTest(otherWorkloadFactory, 0.0f, upperBound, activationDescriptor); + result.output = BoundedReLuRandomInputTest( + workloadFactory, memoryManager, 0.0f, upperBound, activationDescriptor); + result.outputExpected = BoundedReLuRandomInputTest( + refWorkloadFactory, nullptr, 0.0f, upperBound, activationDescriptor); return result; } template -LayerTestResult ConstantLinearActivationTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 0.0f, - int32_t qOffset = 0) +LayerTestResult ConstantLinearActivationTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 0.0f, + int32_t qOffset = 0) { unsigned int inputHeight = 20; unsigned int inputWidth = 17; @@ -336,25 +364,31 @@ LayerTestResult ConstantLinearActivationTestCommon(armnn::IWorkloadFactory& return ret; } -LayerTestResult ConstantLinearActivationTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ConstantLinearActivationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return ConstantLinearActivationTestCommon(workloadFactory); + return ConstantLinearActivationTestCommon(workloadFactory, memoryManager); } -LayerTestResult ConstantLinearActivationUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ConstantLinearActivationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return ConstantLinearActivationTestCommon(workloadFactory, 4.0f, 3); + return ConstantLinearActivationTestCommon(workloadFactory, memoryManager, 4.0f, 3); } template -LayerTestResult SimpleActivationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::ActivationFunction activationFunction, - float activationParameterA, - float activationParameterB, - float qScale, - int32_t qOffset, - const std::vector& inputData, - const std::vector& outputExpectedData) +LayerTestResult SimpleActivationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::ActivationFunction activationFunction, + float activationParameterA, + float activationParameterB, + float qScale, + int32_t qOffset, + const std::vector& inputData, + const std::vector& outputExpectedData) { constexpr static unsigned int inputWidth = 16u; constexpr static unsigned int inputHeight = 1u; @@ -415,7 +449,11 @@ LayerTestResult SimpleActivationTest(armnn::IWorkloadFactory& workloadFact } template -LayerTestResult SimpleSigmoidTestCommon(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult SimpleSigmoidTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { std::vector inputData = { -0.1f, -0.2f, -0.3f, -0.4f, @@ -433,6 +471,7 @@ LayerTestResult SimpleSigmoidTestCommon(armnn::IWorkloadFactory& workloadF std::transform(inputData.begin(), inputData.end(), outputExpectedData.begin(), f); return SimpleActivationTest(workloadFactory, + memoryManager, armnn::ActivationFunction::Sigmoid, 0.f, 0.f, @@ -442,23 +481,29 @@ LayerTestResult SimpleSigmoidTestCommon(armnn::IWorkloadFactory& workloadF outputExpectedData); } -LayerTestResult SimpleSigmoidTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleSigmoidTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SimpleSigmoidTestCommon(workloadFactory, 0.0f, 0); + return SimpleSigmoidTestCommon(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult SimpleSigmoidUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleSigmoidUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SimpleSigmoidTestCommon(workloadFactory, 0.1f, 50); + return SimpleSigmoidTestCommon(workloadFactory, memoryManager, 0.1f, 50); } template -LayerTestResult CompareActivationTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::ActivationFunction f, - unsigned int batchSize = 5, - float qScale = 0.0f, - int32_t qOffset = 0) +LayerTestResult CompareActivationTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::ActivationFunction f, + unsigned int batchSize = 5, + float qScale = 0.0f, + int32_t qOffset = 0) { unsigned int width = 17; unsigned int height = 29; @@ -544,17 +589,23 @@ LayerTestResult CompareActivationTestImpl(armnn::IWorkloadFactory& workload return ret; } -LayerTestResult CompareActivationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::ActivationFunction f, - unsigned int batchSize) +LayerTestResult CompareActivationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::ActivationFunction f, + unsigned int batchSize) { - return CompareActivationTestImpl(workloadFactory, refWorkloadFactory, f, batchSize); + return CompareActivationTestImpl( + workloadFactory, memoryManager, refWorkloadFactory, f, batchSize); } -LayerTestResult CompareActivationUint8Test(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::ActivationFunction f) +LayerTestResult CompareActivationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::ActivationFunction f) { - return CompareActivationTestImpl(workloadFactory, refWorkloadFactory, f, 5, 0.1f, 50); + return CompareActivationTestImpl( + workloadFactory, memoryManager, refWorkloadFactory, f, 5, 0.1f, 50); } diff --git a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp index 67282ed819..6325130218 100644 --- a/src/backends/backendsCommon/test/BatchNormTestImpl.hpp +++ b/src/backends/backendsCommon/test/BatchNormTestImpl.hpp @@ -4,23 +4,28 @@ // #pragma once +#include "WorkloadTestUtils.hpp" + #include #include #include +#include #include #include #include template -LayerTestResult BatchNormTestImpl(armnn::IWorkloadFactory& workloadFactory, - const armnn::TensorShape& inputOutputTensorShape, - const std::vector& inputValues, - const std::vector& expectedOutputValues, - float qScale, - int32_t qOffset, - armnn::DataLayout dataLayout) +LayerTestResult BatchNormTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::TensorShape& inputOutputTensorShape, + const std::vector& inputValues, + const std::vector& expectedOutputValues, + float qScale, + int32_t qOffset, + armnn::DataLayout dataLayout) { armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, armnn::GetDataType()); armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, armnn::GetDataType()); @@ -96,9 +101,11 @@ LayerTestResult BatchNormTestImpl(armnn::IWorkloadFactory& workloadFactory template -LayerTestResult BatchNormTestNhwcImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset) +LayerTestResult BatchNormTestNhwcImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { const unsigned int width = 2; const unsigned int height = 3; diff --git a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp index 03becab73f..d99b7f7fa3 100755 --- a/src/backends/backendsCommon/test/Conv2dTestImpl.hpp +++ b/src/backends/backendsCommon/test/Conv2dTestImpl.hpp @@ -4,6 +4,8 @@ // #pragma once +#include "WorkloadTestUtils.hpp" + #include #include #include @@ -13,6 +15,7 @@ #include "QuantizeHelper.hpp" #include +#include #include #include "Permute.hpp" #include @@ -63,18 +66,20 @@ void ApplyBias(std::vector& v, float vScale, int32_t vOffset, } template -LayerTestResult SimpleConvolution2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& originalInput, - const boost::multi_array& originalKernel, - const boost::multi_array& bias, - const boost::multi_array& originalOutputExpected, - float qScale, - int32_t qOffset, - const armnn::DataLayoutIndexed& layout = armnn::DataLayout::NCHW, - uint32_t padLeft = 0, - uint32_t padTop = 0, - uint32_t padRight = 0, - uint32_t padBottom = 0) +LayerTestResult SimpleConvolution2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& originalInput, + const boost::multi_array& originalKernel, + const boost::multi_array& bias, + const boost::multi_array& originalOutputExpected, + float qScale, + int32_t qOffset, + const armnn::DataLayoutIndexed& layout = armnn::DataLayout::NCHW, + uint32_t padLeft = 0, + uint32_t padTop = 0, + uint32_t padRight = 0, + uint32_t padBottom = 0) { unsigned int inputHeight = boost::numeric_cast(originalInput.shape()[2]); unsigned int inputWidth = boost::numeric_cast(originalInput.shape()[3]); @@ -213,9 +218,7 @@ LayerTestResult SimpleConvolution2dTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -223,20 +226,22 @@ LayerTestResult SimpleConvolution2dTestImpl(armnn::IWorkloadFactory& workl } template -LayerTestResult SimpleConvolution2dNhwcTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& kernel, - const boost::multi_array& bias, - const boost::multi_array& outputExpected, - armnn::DataLayout dataLayout, - float qScale, - int32_t qOffset, - uint32_t padLeft = 1, - uint32_t padTop = 1, - uint32_t padRight = 1, - uint32_t padBottom = 1, - uint32_t strideX = 1, - uint32_t strideY = 1) +LayerTestResult SimpleConvolution2dNhwcTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& kernel, + const boost::multi_array& bias, + const boost::multi_array& outputExpected, + armnn::DataLayout dataLayout, + float qScale, + int32_t qOffset, + uint32_t padLeft = 1, + uint32_t padTop = 1, + uint32_t padRight = 1, + uint32_t padBottom = 1, + uint32_t strideX = 1, + uint32_t strideY = 1) { unsigned int inputNum = boost::numeric_cast(input.shape()[0]); unsigned int inputChannels = boost::numeric_cast(input.shape()[3]); @@ -305,9 +310,7 @@ LayerTestResult SimpleConvolution2dNhwcTestImpl(armnn::IWorkloadFactory& w CopyDataToITensorHandle(inputHandle.get(), &batchedInput[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -315,20 +318,22 @@ LayerTestResult SimpleConvolution2dNhwcTestImpl(armnn::IWorkloadFactory& w } template -LayerTestResult DepthwiseConvolution2dAsymmetricTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& originalKernel, - const boost::multi_array& bias, - const boost::multi_array& outputExpected, - float qScale, - int32_t qOffset, - const armnn::DataLayoutIndexed& layout, - uint32_t padLeft = 0, - uint32_t padTop = 0, - uint32_t padRight = 0, - uint32_t padBottom = 0, - uint32_t strideX = 1, - uint32_t strideY = 1) +LayerTestResult DepthwiseConvolution2dAsymmetricTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& originalKernel, + const boost::multi_array& bias, + const boost::multi_array& outputExpected, + float qScale, + int32_t qOffset, + const armnn::DataLayoutIndexed& layout, + uint32_t padLeft = 0, + uint32_t padTop = 0, + uint32_t padRight = 0, + uint32_t padBottom = 0, + uint32_t strideX = 1, + uint32_t strideY = 1) { unsigned int inputNum = boost::numeric_cast(input.shape()[0]); unsigned int inputChannels = boost::numeric_cast(input.shape()[1]); @@ -455,11 +460,13 @@ LayerTestResult DepthwiseConvolution2dAsymmetricTestImpl(armnn::IWorkloadF } template -LayerTestResult DepthwiseConvolution2dDepthMul1TestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dDepthMul1TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { unsigned int inputHeight = 3; unsigned int inputWidth = 3; @@ -598,11 +605,13 @@ LayerTestResult DepthwiseConvolution2dDepthMul1TestImpl(armnn::IWorkloadFa } template -LayerTestResult DepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { unsigned int depthMultiplier = 2; @@ -799,19 +808,21 @@ LayerTestResult DepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory& wo } template -LayerTestResult DepthwiseConvolution2dNhwcTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& kernel, - const boost::multi_array& bias, - const boost::multi_array& outputExpected, - float qScale, - int32_t qOffset, - uint32_t padLeft = 0, - uint32_t padTop = 0, - uint32_t padRight = 0, - uint32_t padBottom = 0, - uint32_t strideX = 1, - uint32_t strideY = 1) +LayerTestResult DepthwiseConvolution2dNhwcTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& kernel, + const boost::multi_array& bias, + const boost::multi_array& outputExpected, + float qScale, + int32_t qOffset, + uint32_t padLeft = 0, + uint32_t padTop = 0, + uint32_t padRight = 0, + uint32_t padBottom = 0, + uint32_t strideX = 1, + uint32_t strideY = 1) { unsigned int inputNum = boost::numeric_cast(input.shape()[0]); unsigned int inputChannels = boost::numeric_cast(input.shape()[3]); @@ -898,10 +909,12 @@ LayerTestResult DepthwiseConvolution2dNhwcTestImpl(armnn::IWorkloadFactory } template -LayerTestResult Convolution1dTestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled) +LayerTestResult Convolution1dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled) { using B = typename FullyConnectedBiasTypeForInputType::Type; @@ -1005,9 +1018,7 @@ LayerTestResult Convolution1dTestImpl(armnn::IWorkloadFactory& workloadFact CopyDataToITensorHandle(inputHandle.get(), inputData.data()); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); // Output LayerTestResult ret(outputInfo); @@ -1019,8 +1030,10 @@ LayerTestResult Convolution1dTestImpl(armnn::IWorkloadFactory& workloadFact template -LayerTestResult CompareConvolution2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) +LayerTestResult CompareConvolution2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory) { unsigned int inputHeight = 8; unsigned int inputWidth = 16; @@ -1104,9 +1117,7 @@ LayerTestResult CompareConvolution2dTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); workloadRef->Execute(); @@ -1117,9 +1128,11 @@ LayerTestResult CompareConvolution2dTestImpl(armnn::IWorkloadFactory& workl } template -LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult CompareDepthwiseConvolution2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout) { unsigned int inputHeight = 8; unsigned int inputWidth = 16; @@ -1229,6 +1242,7 @@ LayerTestResult CompareDepthwiseConvolution2dTestImpl(armnn::IWorkloadFact CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); workload->Execute(); + workloadRef->Execute(); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); diff --git a/src/backends/backendsCommon/test/ConvertFp16ToFp32TestImpl.hpp b/src/backends/backendsCommon/test/ConvertFp16ToFp32TestImpl.hpp index a63f0cbd1d..1a86f4cbac 100644 --- a/src/backends/backendsCommon/test/ConvertFp16ToFp32TestImpl.hpp +++ b/src/backends/backendsCommon/test/ConvertFp16ToFp32TestImpl.hpp @@ -5,6 +5,8 @@ #pragma once +#include "WorkloadTestUtils.hpp" + #include #include #include @@ -12,10 +14,13 @@ #include #include +#include #include -LayerTestResult SimpleConvertFp16ToFp32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleConvertFp16ToFp32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { using namespace half_float::literal; diff --git a/src/backends/backendsCommon/test/ConvertFp32ToFp16TestImpl.hpp b/src/backends/backendsCommon/test/ConvertFp32ToFp16TestImpl.hpp index 3513823b4e..46176e1f57 100644 --- a/src/backends/backendsCommon/test/ConvertFp32ToFp16TestImpl.hpp +++ b/src/backends/backendsCommon/test/ConvertFp32ToFp16TestImpl.hpp @@ -5,6 +5,8 @@ #pragma once +#include "WorkloadTestUtils.hpp" + #include #include @@ -12,11 +14,14 @@ #include #include +#include #include -LayerTestResult SimpleConvertFp32ToFp16Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleConvertFp32ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { using namespace half_float::literal; diff --git a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp index 298901e640..e7c0f01cc9 100644 --- a/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp +++ b/src/backends/backendsCommon/test/FullyConnectedTestImpl.hpp @@ -3,9 +3,14 @@ // SPDX-License-Identifier: MIT // +#include "WorkloadTestUtils.hpp" + +#include + template LayerTestResult SimpleFullyConnectedTestImpl( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::TensorInfo inputTensorInfo, armnn::TensorInfo outputTensorInfo, armnn::TensorInfo weightsDesc, @@ -41,16 +46,17 @@ LayerTestResult SimpleFullyConnectedTestImpl( outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&result.output[0][0], outputHandle.get()); return result; } -LayerTestResult FullyConnectedFloat32Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled, +LayerTestResult FullyConnectedFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, bool transposeWeights) { unsigned int inputWidth = 1; @@ -120,6 +126,7 @@ LayerTestResult FullyConnectedFloat32Test(armnn::IWorkloadFactory& wor result = SimpleFullyConnectedTestImpl( workloadFactory, + memoryManager, inputTensorInfo, outputTensorInfo, weightsDesc, biasesDesc, weights, bias, input, @@ -141,7 +148,10 @@ LayerTestResult FullyConnectedFloat32Test(armnn::IWorkloadFactory& wor return result; } -LayerTestResult FullyConnectedUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled) +LayerTestResult FullyConnectedUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled) { constexpr static unsigned int inputWidth = 3u; constexpr static unsigned int inputHeight = 2u; @@ -181,6 +191,7 @@ LayerTestResult FullyConnectedUint8Test(armnn::IWorkloadFactory& wor result = SimpleFullyConnectedTestImpl( workloadFactory, + memoryManager, inputTensorInfo, outputTensorInfo, weightsDesc, biasesDesc, weights, bias, input, @@ -210,10 +221,12 @@ LayerTestResult FullyConnectedUint8Test(armnn::IWorkloadFactory& wor // Note this is templated for consistency, but the nature of this tests makes it unlikely to be useful in Uint8 mode. // template -LayerTestResult FullyConnectedLargeTestCommon(armnn::IWorkloadFactory& workloadFactory, - bool transposeWeights, - float qScale = 0.0f, - int32_t qOffset = 0) +LayerTestResult FullyConnectedLargeTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool transposeWeights, + float qScale = 0.0f, + int32_t qOffset = 0) { unsigned int inputWidth = 1; unsigned int inputHeight = 1; @@ -272,6 +285,7 @@ LayerTestResult FullyConnectedLargeTestCommon(armnn::IWorkloadFactory& wor result = SimpleFullyConnectedTestImpl( workloadFactory, + memoryManager, inputTensorInfo, outputTensorInfo, weightsDesc, biasesDesc, weights, bias, input, diff --git a/src/backends/backendsCommon/test/LayerTests.cpp b/src/backends/backendsCommon/test/LayerTests.cpp index 1ce69142df..dad13413b4 100755 --- a/src/backends/backendsCommon/test/LayerTests.cpp +++ b/src/backends/backendsCommon/test/LayerTests.cpp @@ -3,6 +3,7 @@ // SPDX-License-Identifier: MIT // #include "LayerTests.hpp" +#include "WorkloadTestUtils.hpp" #include "test/TensorHelpers.hpp" #include "TensorCopyUtils.hpp" @@ -14,6 +15,7 @@ #include #include +#include #include #include @@ -101,11 +103,13 @@ boost::multi_array GetBias2(bool biasEnabled, float qScale, int32_t qOffse } template -LayerTestResult SimpleConvolution2d3x5TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x5TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { // Use common single-batch 3-channel 16x8 image. armnn::TensorInfo inputDesc({1, 3, 8, 16}, armnn::GetDataType()); @@ -171,6 +175,7 @@ LayerTestResult SimpleConvolution2d3x5TestCommon(armnn::IWorkloadFactory& }))); return SimpleConvolution2dTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(biasEnabled, qScale, qOffset), @@ -181,11 +186,13 @@ LayerTestResult SimpleConvolution2d3x5TestCommon(armnn::IWorkloadFactory& } template -LayerTestResult SimpleConvolution2d3x3TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { // Use a 3x3 kernel, which exercises ArmCompute's direct convolution path. @@ -243,6 +250,7 @@ LayerTestResult SimpleConvolution2d3x3TestCommon(armnn::IWorkloadFactory& }))); return SimpleConvolution2dTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(biasEnabled, qScale, qOffset), @@ -253,11 +261,13 @@ LayerTestResult SimpleConvolution2d3x3TestCommon(armnn::IWorkloadFactory& } template -LayerTestResult SimpleConvolution2d3x3NhwcTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - armnn::DataLayout dataLayout) +LayerTestResult SimpleConvolution2d3x3NhwcTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + armnn::DataLayout dataLayout) { // Use common single-batch 5x5 image. @@ -291,6 +301,7 @@ LayerTestResult SimpleConvolution2d3x3NhwcTestCommon(armnn::IWorkloadFacto boost::multi_array expectedOutput = MakeTensor(outputDesc, outputData); return SimpleConvolution2dNhwcTestImpl(workloadFactory, + memoryManager, input, kernel, boost::multi_array(), @@ -300,46 +311,62 @@ LayerTestResult SimpleConvolution2d3x3NhwcTestCommon(armnn::IWorkloadFacto qOffset); } -LayerTestResult SimpleConvolution2d3x5Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x5Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return SimpleConvolution2d3x5TestCommon(workloadFactory, 0.f, 0, biasEnabled, layout); + return SimpleConvolution2d3x5TestCommon(workloadFactory, memoryManager, 0.f, 0, biasEnabled, layout); } -LayerTestResult SimpleConvolution2d3x5Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x5Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return SimpleConvolution2d3x5TestCommon(workloadFactory, 0.5f, 50, biasEnabled, layout); + return SimpleConvolution2d3x5TestCommon(workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout); } -LayerTestResult SimpleConvolution2d3x3Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return SimpleConvolution2d3x3TestCommon(workloadFactory, 0.f, 0, biasEnabled, layout); + return SimpleConvolution2d3x3TestCommon(workloadFactory, memoryManager, 0.f, 0, biasEnabled, layout); } -LayerTestResult SimpleConvolution2d3x3NhwcTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled) +LayerTestResult SimpleConvolution2d3x3NhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled) { - return SimpleConvolution2d3x3NhwcTestCommon(workloadFactory, 0.f, 0, biasEnabled, armnn::DataLayout::NHWC); + return SimpleConvolution2d3x3NhwcTestCommon(workloadFactory, + memoryManager, + 0.f, + 0, + biasEnabled, + armnn::DataLayout::NHWC); } -LayerTestResult SimpleConvolution2d3x3Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult SimpleConvolution2d3x3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return SimpleConvolution2d3x3TestCommon(workloadFactory, 0.5f, 50, biasEnabled, layout); + return SimpleConvolution2d3x3TestCommon(workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout); } template LayerTestResult Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::DataLayoutIndexed& layout, - float qScale, - int32_t qOffset) + float qScale, + int32_t qOffset) { // Use a single-batch 1-channel 3x3 image as input. armnn::TensorInfo inputDesc({1, 1, 3, 3}, armnn::GetDataType()); @@ -381,6 +408,7 @@ LayerTestResult Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest }))); return SimpleConvolution2dTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(false, qScale, qOffset), @@ -395,10 +423,12 @@ LayerTestResult Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest } template -LayerTestResult SimpleConvolution2dAsymmetricPaddingTestCommon(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout, - float qScale, - int32_t qOffset) +LayerTestResult SimpleConvolution2dAsymmetricPaddingTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout, + float qScale, + int32_t qOffset) { // Use a single-batch 1-channel 5x5 image as input. armnn::TensorInfo inputDesc({ 1, 1, 5, 5 }, armnn::GetDataType()); @@ -434,6 +464,7 @@ LayerTestResult SimpleConvolution2dAsymmetricPaddingTestCommon(armnn::IWor }))); return SimpleConvolution2dTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(false, qScale, qOffset), @@ -448,11 +479,13 @@ LayerTestResult SimpleConvolution2dAsymmetricPaddingTestCommon(armnn::IWor } template -LayerTestResult DepthwiseConvolution2dAsymmetricTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dAsymmetricTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { // Use a single-batch 2-channel 5x5 image as input. armnn::TensorInfo inputTensorInfo({ 1, 2, 5, 5 }, armnn::GetDataType()); @@ -504,6 +537,7 @@ LayerTestResult DepthwiseConvolution2dAsymmetricTestCommon(armnn::IWorkloa }))); return DepthwiseConvolution2dAsymmetricTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(biasEnabled, qScale, qOffset), @@ -520,10 +554,12 @@ LayerTestResult DepthwiseConvolution2dAsymmetricTestCommon(armnn::IWorkloa } template -LayerTestResult DepthwiseConvolution2dNhwcTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale, - int32_t qOffset, - bool biasEnabled) +LayerTestResult DepthwiseConvolution2dNhwcTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset, + bool biasEnabled) { armnn::TensorInfo inputTensorInfo({ 1, 5, 5, 2}, armnn::GetDataType()); auto input = MakeTensor(inputTensorInfo, std::vector( @@ -618,6 +654,7 @@ LayerTestResult DepthwiseConvolution2dNhwcTestCommon(armnn::IWorkloadFacto }))); return DepthwiseConvolution2dNhwcTestImpl(workloadFactory, + memoryManager, input, kernel, GetBias2::Type>(biasEnabled, qScale, qOffset), @@ -633,163 +670,230 @@ LayerTestResult DepthwiseConvolution2dNhwcTestCommon(armnn::IWorkloadFacto } LayerTestResult -Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { - return Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon(workloadFactory, layout, 0.0f, 0); + return Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTestCommon( + workloadFactory, memoryManager, layout, 0.0f, 0); } -LayerTestResult Convolution2dAsymmetricPaddingTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult Convolution2dAsymmetricPaddingTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { - return SimpleConvolution2dAsymmetricPaddingTestCommon(workloadFactory, layout, 0.0f, 0); + return SimpleConvolution2dAsymmetricPaddingTestCommon( + workloadFactory, memoryManager, layout, 0.0f, 0); } -LayerTestResult DepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return DepthwiseConvolution2dTestImpl(workloadFactory, 0.0f, 0, biasEnabled, layout); + return DepthwiseConvolution2dTestImpl( + workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout); } -LayerTestResult DepthwiseConvolution2dDepthNhwcTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled) +LayerTestResult DepthwiseConvolution2dDepthNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled) { - return DepthwiseConvolution2dNhwcTestCommon(workloadFactory, 0.0f, 0, biasEnabled); + return DepthwiseConvolution2dNhwcTestCommon(workloadFactory, memoryManager, 0.0f, 0, biasEnabled); } -LayerTestResult DepthwiseConvolution2dDepthMul1Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dDepthMul1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return DepthwiseConvolution2dDepthMul1TestImpl(workloadFactory, 0.0f, 0, biasEnabled, layout); + return DepthwiseConvolution2dDepthMul1TestImpl( + workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout); } -LayerTestResult DepthwiseConvolution2dAsymmetricTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dAsymmetricTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return DepthwiseConvolution2dAsymmetricTestCommon(workloadFactory, 0.0f, 0, biasEnabled, layout); + return DepthwiseConvolution2dAsymmetricTestCommon( + workloadFactory, memoryManager, 0.0f, 0, biasEnabled, layout); } -LayerTestResult DepthwiseConvolution2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return DepthwiseConvolution2dTestImpl(workloadFactory, 0.5f, 50, biasEnabled, layout); + return DepthwiseConvolution2dTestImpl( + workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout); } -LayerTestResult DepthwiseConvolution2dDepthMul1Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout) +LayerTestResult DepthwiseConvolution2dDepthMul1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout) { - return DepthwiseConvolution2dDepthMul1TestImpl(workloadFactory, 0.5f, 50, biasEnabled, layout); + return DepthwiseConvolution2dDepthMul1TestImpl( + workloadFactory, memoryManager, 0.5f, 50, biasEnabled, layout); } -LayerTestResult Convolution1dTest(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled) +LayerTestResult Convolution1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled) { - return Convolution1dTestImpl(workloadFactory, 0.0f, 0, biasEnabled); + return Convolution1dTestImpl(workloadFactory, memoryManager, 0.0f, 0, biasEnabled); } -LayerTestResult Convolution1dUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled) +LayerTestResult Convolution1dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled) { - return Convolution1dTestImpl(workloadFactory, 0.1f, 128, biasEnabled); + return Convolution1dTestImpl(workloadFactory, memoryManager, 0.1f, 128, biasEnabled); } -LayerTestResult CompareConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) +LayerTestResult CompareConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory) { - return CompareConvolution2dTestImpl(workloadFactory, refWorkloadFactory); + return CompareConvolution2dTestImpl(workloadFactory, memoryManager, refWorkloadFactory); } template -LayerTestResult CompareDepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult CompareDepthwiseConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout) { - return CompareDepthwiseConvolution2dTestImpl(workloadFactory, refWorkloadFactory, layout); + return CompareDepthwiseConvolution2dTestImpl(workloadFactory, memoryManager, refWorkloadFactory, layout); } template LayerTestResult CompareDepthwiseConvolution2dTest( - armnn::IWorkloadFactory&, armnn::IWorkloadFactory&, const armnn::DataLayoutIndexed&); + armnn::IWorkloadFactory&, + const armnn::IBackendInternal::IMemoryManagerSharedPtr&, + armnn::IWorkloadFactory&, + const armnn::DataLayoutIndexed&); + template LayerTestResult CompareDepthwiseConvolution2dTest( - armnn::IWorkloadFactory&, armnn::IWorkloadFactory&, const armnn::DataLayoutIndexed&); + armnn::IWorkloadFactory&, + const armnn::IBackendInternal::IMemoryManagerSharedPtr&, + armnn::IWorkloadFactory&, + const armnn::DataLayoutIndexed&); -LayerTestResult SimpleNormalizationAcrossTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleNormalizationAcrossTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness; auto normChannel = armnn::NormalizationAlgorithmChannel::Across; - return SimpleNormalizationTestImpl(workloadFactory, normChannel, normMethod); + return SimpleNormalizationTestImpl(workloadFactory, memoryManager, normChannel, normMethod); } -LayerTestResult SimpleNormalizationWithinTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleNormalizationWithinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness; auto normChannel = armnn::NormalizationAlgorithmChannel::Within; - return SimpleNormalizationTestImpl(workloadFactory, normChannel, normMethod); + return SimpleNormalizationTestImpl(workloadFactory, memoryManager, normChannel, normMethod); } -LayerTestResult SimpleNormalizationAcrossNhwcTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleNormalizationAcrossNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { auto normMethod = armnn::NormalizationAlgorithmMethod::LocalBrightness; auto normChannel = armnn::NormalizationAlgorithmChannel::Across; - return SimpleNormalizationNhwcTestImpl(workloadFactory, normChannel, normMethod); + return SimpleNormalizationNhwcTestImpl(workloadFactory, memoryManager, normChannel, normMethod); } -LayerTestResult SimpleSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, float beta) +LayerTestResult SimpleSoftmaxTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float beta) { - return SimpleSoftmaxTestImpl(workloadFactory, beta); + return SimpleSoftmaxTestImpl(workloadFactory, memoryManager, beta); } -LayerTestResult SimpleSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, float beta) +LayerTestResult SimpleSoftmaxUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float beta) { - return SimpleSoftmaxTestImpl(workloadFactory, beta); + return SimpleSoftmaxTestImpl(workloadFactory, memoryManager, beta); } -LayerTestResult CompareNormalizationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::NormalizationAlgorithmChannel normChannel, - armnn::NormalizationAlgorithmMethod normMethod) +LayerTestResult CompareNormalizationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::NormalizationAlgorithmChannel normChannel, + armnn::NormalizationAlgorithmMethod normMethod) { - return CompareNormalizationTestImpl(workloadFactory, refWorkloadFactory, normChannel, normMethod); + return CompareNormalizationTestImpl(workloadFactory, memoryManager, refWorkloadFactory, normChannel, normMethod); } -LayerTestResult CompareSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult CompareSoftmaxTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::IWorkloadFactory& refWorkloadFactory, float beta) { - return CompareSoftmaxTestImpl(workloadFactory, refWorkloadFactory, beta); + return CompareSoftmaxTestImpl(workloadFactory, memoryManager, refWorkloadFactory, beta); } -LayerTestResult CompareSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult CompareSoftmaxUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::IWorkloadFactory& refWorkloadFactory, float beta) { - return CompareSoftmaxTestImpl(workloadFactory, refWorkloadFactory, beta); + return CompareSoftmaxTestImpl(workloadFactory, memoryManager, refWorkloadFactory, beta); } -std::vector> SplitterTest(armnn::IWorkloadFactory& workloadFactory) +std::vector> SplitterTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SplitterTestCommon(workloadFactory); + return SplitterTestCommon(workloadFactory, memoryManager); } -std::vector> SplitterUint8Test(armnn::IWorkloadFactory& workloadFactory) +std::vector> SplitterUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SplitterTestCommon(workloadFactory, 1.0f, 0); + return SplitterTestCommon(workloadFactory, memoryManager, 1.0f, 0); } -LayerTestResult CopyViaSplitterTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult CopyViaSplitterTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return CopyViaSplitterTestImpl(workloadFactory, 0.0f, 0); + return CopyViaSplitterTestImpl(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult CopyViaSplitterUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult CopyViaSplitterUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return CopyViaSplitterTestImpl(workloadFactory, 1.0f, 0); + return CopyViaSplitterTestImpl(workloadFactory, memoryManager, 1.0f, 0); } LayerTestResult LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest( - armnn::IWorkloadFactory& workloadFactory) + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputDesc({ 2, 2 }, armnn::GetDataType()); boost::multi_array input = MakeTensor(inputDesc, std::vector( @@ -799,11 +903,13 @@ LayerTestResult LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest( boost::multi_array expectedOutput = MakeTensor(outputDesc, std::vector( {-0.36444446f, -0.00352185f, 0.12886585f, -0.05163646f, -0.42734814f, -0.00478661f, 0.13455015f, -0.03560682f})); - return LstmLayerWithCifgWithPeepholeNoProjectionTestImpl(workloadFactory, input, expectedOutput); + return LstmLayerWithCifgWithPeepholeNoProjectionTestImpl( + workloadFactory, memoryManager, input, expectedOutput); } LayerTestResult LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest( - armnn::IWorkloadFactory& workloadFactory) + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputDesc({ 2, 5 }, armnn::GetDataType()); boost::multi_array input = MakeTensor(inputDesc, std::vector( @@ -819,10 +925,13 @@ LayerTestResult LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest( -0.0186926f, 0.0193662f, -0.0115437f, 0.00422612f, -0.0345232f, 0.00223253f, -0.00957321f, 0.0210624f, 0.013331f, 0.0150954f, 0.02168f})); - return LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl(workloadFactory, input, expectedOutput); + return LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl( + workloadFactory, memoryManager, input, expectedOutput); } -LayerTestResult LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputDesc({2, 2}, armnn::GetDataType()); boost::multi_array input = MakeTensor(inputDesc, std::vector( @@ -834,10 +943,13 @@ LayerTestResult LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(armnn {{-0.02973187f, 0.1229473f, 0.20885126f, -0.15358765f, -0.0185422f, 0.11281417f, 0.24466537f, -0.1826292f}})); - return LstmNoCifgNoPeepholeNoProjectionTestImpl(workloadFactory, input, expectedOutput); + return LstmNoCifgNoPeepholeNoProjectionTestImpl( + workloadFactory, memoryManager, input, expectedOutput); } -LayerTestResult MergerTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MergerTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int outputWidth = 3; unsigned int outputHeight = 6; @@ -957,7 +1069,9 @@ LayerTestResult MergerTest(armnn::IWorkloadFactory& workloadFactory) return ret; } -LayerTestResult AdditionTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int batchSize = 2; unsigned int channels = 2; @@ -1047,7 +1161,9 @@ LayerTestResult AdditionTest(armnn::IWorkloadFactory& workloadFactory) } template -LayerTestResult AdditionBroadcastTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult AdditionBroadcastTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, float qScale, int32_t qOffset) { @@ -1123,7 +1239,9 @@ LayerTestResult AdditionBroadcastTestImpl(armnn::IWorkloadFactory& workloa } template -LayerTestResult AdditionBroadcast1ElementTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult AdditionBroadcast1ElementTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, float qScale, int32_t qOffset) { @@ -1193,28 +1311,38 @@ LayerTestResult AdditionBroadcast1ElementTestImpl(armnn::IWorkloadFactory& return ret; } -LayerTestResult AdditionBroadcastTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionBroadcastTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AdditionBroadcastTestImpl(workloadFactory, 0.0f, 0); + return AdditionBroadcastTestImpl(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult AdditionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionBroadcastUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AdditionBroadcastTestImpl(workloadFactory, 2.f, 0); + return AdditionBroadcastTestImpl(workloadFactory, memoryManager, 2.f, 0); } -LayerTestResult AdditionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AdditionBroadcast1ElementTestImpl(workloadFactory, 0.0f, 0); + return AdditionBroadcast1ElementTestImpl(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult AdditionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AdditionBroadcast1ElementTestImpl(workloadFactory, 0.1333333f, 128); + return AdditionBroadcast1ElementTestImpl(workloadFactory, memoryManager, 0.1333333f, 128); } -LayerTestResult CompareAdditionTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) +LayerTestResult CompareAdditionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory) { unsigned int batchSize = 4; unsigned int channels = 1; @@ -1281,19 +1409,21 @@ LayerTestResult CompareAdditionTest(armnn::IWorkloadFactory& workloadFa namespace { template -LayerTestResult DivisionTestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int shape0[4], - const std::vector& values0, - float scale0, - int32_t offset0, - const unsigned int shape1[4], - const std::vector & values1, - float scale1, - int32_t offset1, - const unsigned int outShape[4], - const std::vector & outValues, - float outScale, - int32_t outOffset) +LayerTestResult DivisionTestHelper( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const unsigned int shape0[4], + const std::vector& values0, + float scale0, + int32_t offset0, + const unsigned int shape1[4], + const std::vector & values1, + float scale1, + int32_t offset1, + const unsigned int outShape[4], + const std::vector & outValues, + float outScale, + int32_t outOffset) { auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : @@ -1345,7 +1475,9 @@ LayerTestResult DivisionTestHelper(armnn::IWorkloadFactory& workloadFactor } } // anonymous namespace -LayerTestResult DivisionByZeroTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionByZeroTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int width = 2; const unsigned int height = 2; @@ -1367,12 +1499,15 @@ LayerTestResult DivisionByZeroTest(armnn::IWorkloadFactory& workloadFac -INFINITY, -INFINITY, INFINITY, INFINITY, 1, 1, 1, 1 }); return DivisionTestHelper(workloadFactory, + memoryManager, shape, input0, 1.0f, 0, shape, input1, 1.0f, 0, shape, output, 1.0f, 0); } -LayerTestResult DivisionTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int width = 2; const unsigned int height = 2; @@ -1395,12 +1530,15 @@ LayerTestResult DivisionTest(armnn::IWorkloadFactory& workloadFactory) return DivisionTestHelper(workloadFactory, + memoryManager, shape, input0, 1.0f, 0, shape, input1, 1.0f, 0, shape, output, 1.0f, 0); } -LayerTestResult DivisionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 2, 2, 2 }; std::vector input0({ 2, 4, 6, 8, 10, 12, 14, 16}); @@ -1412,12 +1550,15 @@ LayerTestResult DivisionBroadcast1ElementTest(armnn::IWorkloadFactory& return DivisionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult DivisionBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionBroadcast1DVectorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 3, 3, 2 }; std::vector input0({ @@ -1434,13 +1575,16 @@ LayerTestResult DivisionBroadcast1DVectorTest(armnn::IWorkloadFactory& 13, 14, 15, 16, 17, 18}); return DivisionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult DivisionUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int width = 2; const unsigned int height = 2; @@ -1460,12 +1604,15 @@ LayerTestResult DivisionUint8Test(armnn::IWorkloadFactory& workloadFa return DivisionTestHelper(workloadFactory, - shape, input0, 1.0f, 0, - shape, input1, 1.0f, 0, - shape, output, 0.25f, 0); + memoryManager, + shape, input0, 1.0f, 0, + shape, input1, 1.0f, 0, + shape, output, 0.25f, 0); } -LayerTestResult DivisionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 2, 2, 2 }; std::vector input0({ 2, 4, 6, 8, 10, 12, 14, 16}); @@ -1476,12 +1623,15 @@ LayerTestResult DivisionBroadcast1ElementUint8Test(armnn::IWorkloadF std::vector output({ 1, 2, 3, 4, 5, 6, 7, 8}); return DivisionTestHelper(workloadFactory, - shape0, input0, 1.0f, 0, - shape1, input1, 1.0f, 0, - shape0, output, 1.0f, 0); + memoryManager, + shape0, input0, 1.0f, 0, + shape1, input1, 1.0f, 0, + shape0, output, 1.0f, 0); } -LayerTestResult DivisionBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult DivisionBroadcast1DVectorUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 3, 3, 2 }; std::vector input0({1, 4, 3, 8, 5, 12, @@ -1496,19 +1646,22 @@ LayerTestResult DivisionBroadcast1DVectorUint8Test(armnn::IWorkloadF 13, 14, 15, 16, 17, 18}); return DivisionTestHelper(workloadFactory, - shape0, input0, 1.0f, 0, - shape1, input1, 1.0f, 0, - shape0, output, 1.0f, 0); + memoryManager, + shape0, input0, 1.0f, 0, + shape1, input1, 1.0f, 0, + shape0, output, 1.0f, 0); } namespace { -LayerTestResult MultiplicationTestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int shape0[4], - const std::vector & values0, - const unsigned int shape1[4], - const std::vector & values1, - const unsigned int outShape[4], - const std::vector & outValues) +LayerTestResult MultiplicationTestHelper( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const unsigned int shape0[4], + const std::vector & values0, + const unsigned int shape1[4], + const std::vector & values1, + const unsigned int outShape[4], + const std::vector & outValues) { const size_t dimensionCount = 4; armnn::TensorInfo inputTensorInfo0{dimensionCount, shape0, armnn::DataType::Float32}; @@ -1549,7 +1702,9 @@ LayerTestResult MultiplicationTestHelper(armnn::IWorkloadFactory& workl } // anonymous namespace -LayerTestResult MultiplicationTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int width = 2; const unsigned int height = 2; @@ -1571,6 +1726,7 @@ LayerTestResult MultiplicationTest(armnn::IWorkloadFactory& workloadFac 12, 12, 12, 12, 20, 20, 20, 20 }); return MultiplicationTestHelper(workloadFactory, + memoryManager, shape, input0, shape, @@ -1579,7 +1735,9 @@ LayerTestResult MultiplicationTest(armnn::IWorkloadFactory& workloadFac output); } -LayerTestResult MultiplicationBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 2, 2, 2 }; std::vector input0({ 1, 2, 3, 4, 5, 6, 7, 8}); @@ -1590,6 +1748,7 @@ LayerTestResult MultiplicationBroadcast1ElementTest(armnn::IWorkloadFa std::vector output({ 2, 4, 6, 8, 10, 12, 14, 16}); return MultiplicationTestHelper(workloadFactory, + memoryManager, shape0, input0, shape1, @@ -1598,7 +1757,9 @@ LayerTestResult MultiplicationBroadcast1ElementTest(armnn::IWorkloadFa output); } -LayerTestResult MultiplicationBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationBroadcast1DVectorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int shape0[] = { 1, 3, 3, 2 }; std::vector input0({ @@ -1615,6 +1776,7 @@ LayerTestResult MultiplicationBroadcast1DVectorTest(armnn::IWorkloadFa 13, 28, 15, 32, 17, 36}); return MultiplicationTestHelper(workloadFactory, + memoryManager, shape0, input0, shape1, @@ -1623,8 +1785,10 @@ LayerTestResult MultiplicationBroadcast1DVectorTest(armnn::IWorkloadFa output); } -LayerTestResult CompareMultiplicationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) +LayerTestResult CompareMultiplicationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory) { const unsigned int width = 16; const unsigned int height = 32; @@ -1690,8 +1854,10 @@ LayerTestResult CompareMultiplicationTest(armnn::IWorkloadFactory& work return comparisonResult; } -LayerTestResult CompareBatchNormTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory) +LayerTestResult CompareBatchNormTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory) { const unsigned int width = 2; const unsigned int height = 3; @@ -1772,6 +1938,7 @@ LayerTestResult CompareBatchNormTest(armnn::IWorkloadFactory& workloadF template void PermuteTensorData( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::PermutationVector& mappings, armnn::TensorInfo & inputTensorInfo, const T * inputData, @@ -1918,6 +2085,7 @@ void Generate3dPermuteVectorForConcat( template void PermuteInputsForConcat( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, std::vector & inputTensorInfos, std::vector & inputData, std::vector> & inputDataStorage, @@ -1958,6 +2126,7 @@ void PermuteInputsForConcat( newTensorInfo.SetShape(ExpandTensorShapeTo3dForPermute(tensorInfo.GetShape())); PermuteTensorData(workloadFactory, + memoryManager, permutations.first, newTensorInfo, inputData[nthInput], @@ -1984,6 +2153,7 @@ void PermuteInputsForConcat( template void PermuteOutputForConcat( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::TensorInfo & tensorInfo, const armnn::PermutationVector & permuteVector, std::unique_ptr && inputDataHandle, @@ -2005,6 +2175,7 @@ void PermuteOutputForConcat( CopyDataFromITensorHandle(&inputData[0], inputDataHandle.get()); PermuteTensorData(workloadFactory, + memoryManager, permuteVector, resultTensorInfo, &inputData[0], @@ -2014,12 +2185,14 @@ void PermuteOutputForConcat( } template -void Concatenate(armnn::IWorkloadFactory& workloadFactory, - std::initializer_list inputTensorInfosOrig, - std::initializer_list inputsOrig, - const armnn::TensorInfo& outputTensorInfoOrig, - T * output, - unsigned int concatDim) +void Concatenate( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + std::initializer_list inputTensorInfosOrig, + std::initializer_list inputsOrig, + const armnn::TensorInfo& outputTensorInfoOrig, + T * output, + unsigned int concatDim) { BOOST_ASSERT_MSG(output != nullptr, "output must not be null"); if (output == nullptr) @@ -2053,6 +2226,7 @@ void Concatenate(armnn::IWorkloadFactory& workloadFactory, // the requested axis is not supported. // PermuteInputsForConcat(workloadFactory, + memoryManager, inputTensorInfos, inputs, tmpInputDataStorage, @@ -2118,6 +2292,7 @@ void Concatenate(armnn::IWorkloadFactory& workloadFactory, if (needPermuteForConcat) { PermuteOutputForConcat(workloadFactory, + memoryManager, outputTensorInfo, permuteVector, std::move(outputHandle), @@ -2130,7 +2305,11 @@ void Concatenate(armnn::IWorkloadFactory& workloadFactory, } template -LayerTestResult Concatenation1dTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult Concatenation1dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { armnn::TensorInfo inputTensorInfo({ 3 }, armnn::GetDataType()); @@ -2144,7 +2323,7 @@ LayerTestResult Concatenation1dTestImpl(armnn::IWorkloadFactory& workloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { inputTensorInfo, inputTensorInfo, inputTensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2159,13 +2338,17 @@ LayerTestResult Concatenation1dTestImpl(armnn::IWorkloadFactory& workloadF return result; } -LayerTestResult Concatenation1dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation1dTestImpl(workloadFactory, 0.0f, 0); + return Concatenation1dTestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation2dTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult Concatenation2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::TensorInfo& outputTensorInfo, unsigned int dimension, const float qScale, @@ -2201,7 +2384,7 @@ LayerTestResult Concatenation2dTestImpl(armnn::IWorkloadFactory& workloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { inputTensorInfo, inputTensorInfo, inputTensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2213,12 +2396,16 @@ LayerTestResult Concatenation2dTestImpl(armnn::IWorkloadFactory& workloadF } template -LayerTestResult Concatenation2dDim0TestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, int32_t qOffset) +LayerTestResult Concatenation2dDim0TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { armnn::TensorInfo outputTensorInfo({ 6, 3 }, armnn::GetDataType()); - LayerTestResult result = Concatenation2dTestImpl(workloadFactory, outputTensorInfo, 0, qScale, qOffset); + LayerTestResult result = + Concatenation2dTestImpl(workloadFactory, memoryManager, outputTensorInfo, 0, qScale, qOffset); result.outputExpected = MakeTensor(outputTensorInfo, QuantizedVector(qScale, qOffset, { // Batch 0 1.0f, 2.0f, 3.0f, @@ -2242,18 +2429,24 @@ LayerTestResult Concatenation2dDim0TestImpl(armnn::IWorkloadFactory& workl return result; } -LayerTestResult Concatenation2dDim0Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim0Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim0TestImpl(workloadFactory, 0.0f, 0); + return Concatenation2dDim0TestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation2dDim1TestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, int32_t qOffset) +LayerTestResult Concatenation2dDim1TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { armnn::TensorInfo outputTensorInfo({ 2, 9 }, armnn::GetDataType()); - LayerTestResult result = Concatenation2dTestImpl(workloadFactory, outputTensorInfo, 1, qScale, qOffset); + LayerTestResult result = + Concatenation2dTestImpl(workloadFactory, memoryManager, outputTensorInfo, 1, qScale, qOffset); result.outputExpected = MakeTensor(outputTensorInfo, QuantizedVector(qScale, qOffset, { // Batch 0 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 7.0f, 8.0f, 9.0f, @@ -2265,13 +2458,18 @@ LayerTestResult Concatenation2dDim1TestImpl(armnn::IWorkloadFactory& workl return result; } -LayerTestResult Concatenation2dDim1Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim1TestImpl(workloadFactory, 0.0f, 0); + return Concatenation2dDim1TestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation2dDim0DiffInputDimsTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation2dDim0DiffInputDimsTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo input0TensorInfo({ 2, 3 }, armnn::GetDataType()); @@ -2306,7 +2504,7 @@ LayerTestResult Concatenation2dDim0DiffInputDimsTestImpl(armnn::IWorkloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { input0TensorInfo, input1TensorInfo, input2TensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2337,13 +2535,18 @@ LayerTestResult Concatenation2dDim0DiffInputDimsTestImpl(armnn::IWorkloadF return result; } -LayerTestResult Concatenation2dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim0DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim0DiffInputDimsTestImpl(workloadFactory, 0.0f, 0); + return Concatenation2dDim0DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation2dDim1DiffInputDimsTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation2dDim1DiffInputDimsTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo input0TensorInfo({ 2, 3 }, armnn::GetDataType()); @@ -2378,7 +2581,7 @@ LayerTestResult Concatenation2dDim1DiffInputDimsTestImpl(armnn::IWorkloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { input0TensorInfo, input1TensorInfo, input2TensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2397,13 +2600,17 @@ LayerTestResult Concatenation2dDim1DiffInputDimsTestImpl(armnn::IWorkloadF return result; } -LayerTestResult Concatenation2dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim1DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim1DiffInputDimsTestImpl(workloadFactory, 0.0f, 0); + return Concatenation2dDim1DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult Concatenation3dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, const armnn::TensorInfo& outputTensorInfo, unsigned int dimension, float qScale, @@ -2475,7 +2682,7 @@ LayerTestResult Concatenation3dTestImpl(armnn::IWorkloadFactory& workloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { inputTensorInfo, inputTensorInfo, inputTensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2487,13 +2694,16 @@ LayerTestResult Concatenation3dTestImpl(armnn::IWorkloadFactory& workloadF } template -LayerTestResult Concatenation3dDim0TestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation3dDim0TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo outputTensorInfo({ 6, 3, 2 }, armnn::GetDataType()); - LayerTestResult result = Concatenation3dTestImpl(workloadFactory, outputTensorInfo, 0, - qScale, qOffset); + LayerTestResult result = + Concatenation3dTestImpl(workloadFactory, memoryManager, outputTensorInfo, 0, qScale, qOffset); result.outputExpected = MakeTensor(outputTensorInfo, QuantizedVector(qScale, qOffset, { // Batch 0, Channel 0 1.0f, 2.0f, @@ -2552,18 +2762,24 @@ LayerTestResult Concatenation3dDim0TestImpl(armnn::IWorkloadFactory& workl return result; } -LayerTestResult Concatenation3dDim0Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim0Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim0TestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim0TestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dDim1TestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, int32_t qOffset) +LayerTestResult Concatenation3dDim1TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { armnn::TensorInfo outputTensorInfo({ 2, 9, 2 }, armnn::GetDataType()); - LayerTestResult result = Concatenation3dTestImpl(workloadFactory, outputTensorInfo, 1, qScale, qOffset); + LayerTestResult result = + Concatenation3dTestImpl(workloadFactory, memoryManager, outputTensorInfo, 1, qScale, qOffset); result.outputExpected = MakeTensor(outputTensorInfo, QuantizedVector(qScale, qOffset, { // Batch 0, Channel 0 1.0f, 2.0f, @@ -2623,18 +2839,24 @@ LayerTestResult Concatenation3dDim1TestImpl(armnn::IWorkloadFactory& workl return result; } -LayerTestResult Concatenation3dDim1Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim1TestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim1TestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dDim2TestImpl(armnn::IWorkloadFactory& workloadFactory, - float qScale, int32_t qOffset) +LayerTestResult Concatenation3dDim2TestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { armnn::TensorInfo outputTensorInfo({ 2, 3, 6 }, armnn::GetDataType()); - LayerTestResult result = Concatenation3dTestImpl(workloadFactory, outputTensorInfo, 2, qScale, qOffset); + LayerTestResult result = + Concatenation3dTestImpl(workloadFactory, memoryManager, outputTensorInfo, 2, qScale, qOffset); result.outputExpected = MakeTensor(outputTensorInfo, QuantizedVector(qScale, qOffset, { // Batch 0, Channel 0 1.0f, 2.0f, 7.0f, 8.0f, 13.0f, 14.0f, @@ -2658,13 +2880,18 @@ LayerTestResult Concatenation3dDim2TestImpl(armnn::IWorkloadFactory& workl return result; } -LayerTestResult Concatenation3dDim2Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim2TestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim2TestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dDim0DiffInputDimsTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation3dDim0DiffInputDimsTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, armnn::GetDataType()); @@ -2735,7 +2962,7 @@ LayerTestResult Concatenation3dDim0DiffInputDimsTestImpl(armnn::IWorkloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { input0TensorInfo, input1TensorInfo, input2TensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2802,13 +3029,18 @@ LayerTestResult Concatenation3dDim0DiffInputDimsTestImpl(armnn::IWorkloadF return result; } -LayerTestResult Concatenation3dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim0DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim0DiffInputDimsTestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim0DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dDim1DiffInputDimsTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation3dDim1DiffInputDimsTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, armnn::GetDataType()); @@ -2873,7 +3105,7 @@ LayerTestResult Concatenation3dDim1DiffInputDimsTestImpl(armnn::IWorkloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { input0TensorInfo, input1TensorInfo, input2TensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -2934,13 +3166,18 @@ LayerTestResult Concatenation3dDim1DiffInputDimsTestImpl(armnn::IWorkloadF return result; } -LayerTestResult Concatenation3dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim1DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim1DiffInputDimsTestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim1DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.0f, 0); } template -LayerTestResult Concatenation3dDim2DiffInputDimsTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, +LayerTestResult Concatenation3dDim2DiffInputDimsTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { armnn::TensorInfo input0TensorInfo({ 2, 3, 2 }, armnn::GetDataType()); @@ -3011,7 +3248,7 @@ LayerTestResult Concatenation3dDim2DiffInputDimsTestImpl(armnn::IWorkloadF std::vector output; output.resize(outputTensorInfo.GetNumElements()); - Concatenate(workloadFactory, + Concatenate(workloadFactory, memoryManager, { input0TensorInfo, input1TensorInfo, input2TensorInfo }, { input0.data(), input1.data(), input2.data() }, outputTensorInfo, @@ -3042,13 +3279,17 @@ LayerTestResult Concatenation3dDim2DiffInputDimsTestImpl(armnn::IWorkloadF return result; } -LayerTestResult Concatenation3dDim2DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim2DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim2DiffInputDimsTestImpl(workloadFactory, 0.0f, 0); + return Concatenation3dDim2DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult ResizeBilinearNopTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult ResizeBilinearNopTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { const armnn::TensorInfo inputTensorInfo = GetTensorInfo(1, 2, 4, 4, dataLayout); const armnn::TensorInfo outputTensorInfo = GetTensorInfo(1, 2, 4, 4, dataLayout); @@ -3099,8 +3340,10 @@ LayerTestResult ResizeBilinearNopTest(armnn::IWorkloadFactory& workloa return result; } -LayerTestResult SimpleResizeBilinearTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { const armnn::TensorInfo inputTensorInfo = GetTensorInfo(1, 2, 2, 2, dataLayout); const armnn::TensorInfo outputTensorInfo = GetTensorInfo(1, 2, 1, 1, dataLayout); @@ -3163,8 +3406,10 @@ LayerTestResult SimpleResizeBilinearTest(armnn::IWorkloadFactory& work return result; } -LayerTestResult ResizeBilinearSqMinTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult ResizeBilinearSqMinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { const armnn::TensorInfo inputTensorInfo = GetTensorInfo(1, 2, 4, 4, dataLayout); const armnn::TensorInfo outputTensorInfo = GetTensorInfo(1, 2, 2, 2, dataLayout); @@ -3227,8 +3472,10 @@ LayerTestResult ResizeBilinearSqMinTest(armnn::IWorkloadFactory& workl return result; } -LayerTestResult ResizeBilinearMinTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult ResizeBilinearMinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { const armnn::TensorInfo inputTensorInfo = GetTensorInfo(1, 2, 3, 5, dataLayout); const armnn::TensorInfo outputTensorInfo = GetTensorInfo(1, 2, 2, 3, dataLayout); @@ -3289,8 +3536,10 @@ LayerTestResult ResizeBilinearMinTest(armnn::IWorkloadFactory& workloa return result; } -LayerTestResult ResizeBilinearMagTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult ResizeBilinearMagTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { const armnn::TensorInfo inputTensorInfo = GetTensorInfo(1, 2, 3, 2, dataLayout); const armnn::TensorInfo outputTensorInfo = GetTensorInfo(1, 2, 3, 5, dataLayout); @@ -3353,7 +3602,9 @@ LayerTestResult ResizeBilinearMagTest(armnn::IWorkloadFactory& workloa return result; } -LayerTestResult FakeQuantizationTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult FakeQuantizationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int width = 2; constexpr unsigned int height = 3; @@ -3410,11 +3661,13 @@ LayerTestResult FakeQuantizationTest(armnn::IWorkloadFactory& workload namespace { -LayerTestResult L2NormalizationTestImpl(armnn::IWorkloadFactory& workloadFactory, - const armnn::TensorShape& inputOutputTensorShape, - const std::vector& inputValues, - const std::vector& expectedOutputValues, - const armnn::DataLayoutIndexed& layout) +LayerTestResult L2NormalizationTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::TensorShape& inputOutputTensorShape, + const std::vector& inputValues, + const std::vector& expectedOutputValues, + const armnn::DataLayoutIndexed& layout) { const armnn::TensorInfo inputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32); const armnn::TensorInfo outputTensorInfo(inputOutputTensorShape, armnn::DataType::Float32); @@ -3458,9 +3711,7 @@ LayerTestResult L2NormalizationTestImpl(armnn::IWorkloadFactory& workl CopyDataToITensorHandle(inputHandle.get(), &inputTensor[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&result.output[0][0][0][0], outputHandle.get()); @@ -3477,7 +3728,11 @@ float CalcInvL2Norm(std::initializer_list elements) } // anonymous namespace template -LayerTestResult Pad2dTestCommon(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult Pad2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { const armnn::TensorShape inputShape{ 3, 3 }; const armnn::TensorShape outputShape{ 7, 7 }; @@ -3541,7 +3796,11 @@ LayerTestResult Pad2dTestCommon(armnn::IWorkloadFactory& workloadFactory, } template -LayerTestResult Pad3dTestCommon(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult Pad3dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { const armnn::TensorShape inputShape{ 2, 2, 2 }; const armnn::TensorShape outputShape{ 3, 5, 6 }; @@ -3621,7 +3880,11 @@ LayerTestResult Pad3dTestCommon(armnn::IWorkloadFactory& workloadFactory, } template -LayerTestResult Pad4dTestCommon(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult Pad4dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, + int32_t qOffset) { const armnn::TensorShape inputShape{ 2, 2, 3, 2 }; const armnn::TensorShape outputShape{ 4, 5, 7, 4 }; @@ -3853,38 +4116,52 @@ LayerTestResult Pad4dTestCommon(armnn::IWorkloadFactory& workloadFactory, return result; } -LayerTestResult PadUint82dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadUint82dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad2dTestCommon(workloadFactory, 1.0f, 0); + return Pad2dTestCommon(workloadFactory, memoryManager, 1.0f, 0); } -LayerTestResult PadUint83dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadUint83dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad3dTestCommon(workloadFactory, 1.0f, 0); + return Pad3dTestCommon(workloadFactory, memoryManager, 1.0f, 0); } -LayerTestResult PadUint84dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadUint84dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad4dTestCommon(workloadFactory, 1.0f, 0); + return Pad4dTestCommon(workloadFactory, memoryManager, 1.0f, 0); } -LayerTestResult PadFloat322dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadFloat322dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad2dTestCommon(workloadFactory, 0.0f, 0); + return Pad2dTestCommon(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult PadFloat323dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadFloat323dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad3dTestCommon(workloadFactory, 0.0f, 0); + return Pad3dTestCommon(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult PadFloat324dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PadFloat324dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Pad4dTestCommon(workloadFactory, 0.0f, 0); + return Pad4dTestCommon(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult L2Normalization1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { // Width: 1 // Height: 1 @@ -3946,12 +4223,15 @@ LayerTestResult L2Normalization1dTest(armnn::IWorkloadFactory& workloa 10.0f * approxInvL2Norm }; - return L2NormalizationTestImpl(workloadFactory, inputOutputShape, + + return L2NormalizationTestImpl(workloadFactory, memoryManager, inputOutputShape, inputValues, expectedOutputValues, layout); } -LayerTestResult L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult L2Normalization2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { // Width: 5 // Height: 1 @@ -3989,12 +4269,14 @@ LayerTestResult L2Normalization2dTest(armnn::IWorkloadFactory& workloa 10.0f * CalcInvL2Norm({ 9.0f, 10.0f }) }; - return L2NormalizationTestImpl(workloadFactory, inputOutputShape, + return L2NormalizationTestImpl(workloadFactory, memoryManager, inputOutputShape, inputValues, expectedOutputValues, layout); } -LayerTestResult L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult L2Normalization3dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { // Width: 3 // Height: 4 @@ -4052,14 +4334,16 @@ LayerTestResult L2Normalization3dTest(armnn::IWorkloadFactory& workloa 161.0f * CalcInvL2Norm({ 220.0f, 161.0f }) }; - return L2NormalizationTestImpl(workloadFactory, inputOutputShape, + return L2NormalizationTestImpl(workloadFactory, memoryManager, inputOutputShape, inputValues, expectedOutputValues, layout); } -LayerTestResult L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout) +LayerTestResult L2Normalization4dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout) { - // Width: 3 + // Width: 3 // Height: 4 // Channels: 3 // BatchSize: 2 @@ -4195,12 +4479,14 @@ LayerTestResult L2Normalization4dTest(armnn::IWorkloadFactory& workloa 88.0f * CalcInvL2Norm({ 189.0f, 21.0f, 88.0f }) }; - return L2NormalizationTestImpl(workloadFactory, inputOutputShape, + return L2NormalizationTestImpl(workloadFactory, memoryManager, inputOutputShape, inputValues, expectedOutputValues, layout); } template -LayerTestResult ConstantTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult ConstantTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, float qScale, int32_t qOffset) { @@ -4292,17 +4578,23 @@ LayerTestResult ConstantTestImpl(armnn::IWorkloadFactory& workloadFactory, return result; } -LayerTestResult ConstantTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ConstantTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return ConstantTestImpl(workloadFactory, 0.0f, 0); + return ConstantTestImpl(workloadFactory, memoryManager, 0.0f, 0); } -LayerTestResult ConstantTestUint8(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ConstantTestUint8( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return ConstantTestImpl(workloadFactory, 1.0f, 0); + return ConstantTestImpl(workloadFactory, memoryManager, 1.0f, 0); } -LayerTestResult MergerUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MergerUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int outputWidth = 3; unsigned int outputHeight = 6; @@ -4435,7 +4727,9 @@ LayerTestResult MergerUint8Test(armnn::IWorkloadFactory& workloadFac return ret; } -LayerTestResult AdditionUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int batchSize = 1; unsigned int channels = 2; @@ -4511,19 +4805,21 @@ LayerTestResult AdditionUint8Test(armnn::IWorkloadFactory& workloadF namespace { -LayerTestResult MultiplicationUint8TestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int shape0[4], - const std::vector & values0, - float scale0, - int32_t offset0, - const unsigned int shape1[4], - const std::vector & values1, - float scale1, - int32_t offset1, - const unsigned int outShape[4], - const std::vector & outValues, - float outScale, - int32_t outOffset) +LayerTestResult MultiplicationUint8TestHelper( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const unsigned int shape0[4], + const std::vector & values0, + float scale0, + int32_t offset0, + const unsigned int shape1[4], + const std::vector & values1, + float scale1, + int32_t offset1, + const unsigned int outShape[4], + const std::vector & outValues, + float outScale, + int32_t outOffset) { armnn::TensorInfo inputTensorInfo0(4, shape0, armnn::DataType::QuantisedAsymm8); armnn::TensorInfo inputTensorInfo1(4, shape1, armnn::DataType::QuantisedAsymm8); @@ -4571,7 +4867,9 @@ LayerTestResult MultiplicationUint8TestHelper(armnn::IWorkloadFactor } } // anonymous namespace -LayerTestResult MultiplicationUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { unsigned int batchSize = 1; unsigned int channels = 2; @@ -4599,6 +4897,7 @@ LayerTestResult MultiplicationUint8Test(armnn::IWorkloadFactory& wor }); return MultiplicationUint8TestHelper(workloadFactory, + memoryManager, shape, input0, 4.0f, @@ -4613,7 +4912,9 @@ LayerTestResult MultiplicationUint8Test(armnn::IWorkloadFactory& wor -5); } -LayerTestResult MultiplicationBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 1 }; @@ -4631,6 +4932,7 @@ LayerTestResult MultiplicationBroadcast1ElementUint8Test(armnn::IWor }); return MultiplicationUint8TestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, @@ -4645,7 +4947,9 @@ LayerTestResult MultiplicationBroadcast1ElementUint8Test(armnn::IWor 0); } -LayerTestResult MultiplicationBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MultiplicationBroadcast1DVectorUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 2, 2, 3 }; const unsigned int shape1[] = { 1, 1, 1, 3 }; @@ -4663,6 +4967,7 @@ LayerTestResult MultiplicationBroadcast1DVectorUint8Test(armnn::IWor }); return MultiplicationUint8TestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, @@ -4680,19 +4985,21 @@ LayerTestResult MultiplicationBroadcast1DVectorUint8Test(armnn::IWor namespace { template -LayerTestResult SubtractionTestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int shape0[4], - const std::vector& values0, - float scale0, - int32_t offset0, - const unsigned int shape1[4], - const std::vector & values1, - float scale1, - int32_t offset1, - const unsigned int outShape[4], - const std::vector & outValues, - float outScale, - int32_t outOffset) +LayerTestResult SubtractionTestHelper( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const unsigned int shape0[4], + const std::vector& values0, + float scale0, + int32_t offset0, + const unsigned int shape1[4], + const std::vector & values1, + float scale1, + int32_t offset1, + const unsigned int outShape[4], + const std::vector & outValues, + float outScale, + int32_t outOffset) { auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : @@ -4744,7 +5051,9 @@ LayerTestResult SubtractionTestHelper(armnn::IWorkloadFactory& workloadFac } } // anonymous namespace -LayerTestResult SubtractionUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 2, 2 }; @@ -4754,12 +5063,15 @@ LayerTestResult SubtractionUint8Test(armnn::IWorkloadFactory& worklo std::vector output({ 3, 3, 5, 5 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 0.5f, 2, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult SubtractionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 1, 1 }; @@ -4769,12 +5081,15 @@ LayerTestResult SubtractionBroadcast1ElementUint8Test(armnn::IWorklo std::vector output({ 5, 6, 7, 8 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 0.5f, 2, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 3); } -LayerTestResult SubtractionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionBroadcastUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 2, 1 }; @@ -4784,12 +5099,15 @@ LayerTestResult SubtractionBroadcastUint8Test(armnn::IWorkloadFactor std::vector output({ 8, 11, 12, 15 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult SubtractionTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 2, 2 }; @@ -4799,12 +5117,15 @@ LayerTestResult SubtractionTest(armnn::IWorkloadFactory& workloadFacto std::vector output({ 0, 3, 3, 2 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult SubtractionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 1, 1 }; @@ -4814,12 +5135,15 @@ LayerTestResult SubtractionBroadcast1ElementTest(armnn::IWorkloadFacto std::vector output({ -9, -8, -7, -6 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult SubtractionBroadcastTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SubtractionBroadcastTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int shape0[] = { 1, 1, 2, 2 }; const unsigned int shape1[] = { 1, 1, 1, 2 }; @@ -4829,12 +5153,15 @@ LayerTestResult SubtractionBroadcastTest(armnn::IWorkloadFactory& work std::vector output({ -9, 7, -7, 9 }); return SubtractionTestHelper(workloadFactory, + memoryManager, shape0, input0, 1.0f, 0, shape1, input1, 1.0f, 0, shape0, output, 1.0f, 0); } -LayerTestResult ResizeBilinearNopUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ResizeBilinearNopUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int inputWidth = 4; constexpr unsigned int inputHeight = 4; @@ -4886,7 +5213,9 @@ LayerTestResult ResizeBilinearNopUint8Test(armnn::IWorkloadFactory& return result; } -LayerTestResult SimpleResizeBilinearUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleResizeBilinearUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int inputWidth = 2; constexpr unsigned int inputHeight = 2; @@ -4943,7 +5272,9 @@ LayerTestResult SimpleResizeBilinearUint8Test(armnn::IWorkloadFactor return result; } -LayerTestResult ResizeBilinearSqMinUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ResizeBilinearSqMinUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int inputWidth = 4; constexpr unsigned int inputHeight = 4; @@ -4998,7 +5329,9 @@ LayerTestResult ResizeBilinearSqMinUint8Test(armnn::IWorkloadFactory return result; } -LayerTestResult ResizeBilinearMinUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ResizeBilinearMinUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int inputWidth = 3; constexpr unsigned int inputHeight = 2; @@ -5051,7 +5384,9 @@ LayerTestResult ResizeBilinearMinUint8Test(armnn::IWorkloadFactory& return result; } -LayerTestResult ResizeBilinearMagUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ResizeBilinearMagUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { constexpr unsigned int inputWidth = 2; constexpr unsigned int inputHeight = 3; @@ -5106,7 +5441,9 @@ LayerTestResult ResizeBilinearMagUint8Test(armnn::IWorkloadFactory& return result; } -LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchNormTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { // BatchSize: 1 // Channels: 2 @@ -5139,11 +5476,14 @@ LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory 2.f, 4.f }; - return BatchNormTestImpl(workloadFactory, inputOutputShape, inputValues, expectedOutputValues, + return BatchNormTestImpl(workloadFactory, memoryManager, + inputOutputShape, inputValues, expectedOutputValues, 0.f, 0, armnn::DataLayout::NCHW); } -LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchNormNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { // BatchSize: 1 // Height: 3 @@ -5180,11 +5520,14 @@ LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFac 6.f, 4.f }; - return BatchNormTestImpl(workloadFactory, inputOutputShape, inputValues, expectedOutputValues, + return BatchNormTestImpl(workloadFactory, memoryManager, + inputOutputShape, inputValues, expectedOutputValues, 0.f, 0, armnn::DataLayout::NHWC); } -LayerTestResult BatchNormUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchNormUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { // BatchSize: 1 // Channels: 2 @@ -5217,11 +5560,14 @@ LayerTestResult BatchNormUint8Test(armnn::IWorkloadFactory& workload 2.f, 4.f }; - return BatchNormTestImpl(workloadFactory, inputOutputShape, inputValues, expectedOutputValues, + return BatchNormTestImpl(workloadFactory, memoryManager, + inputOutputShape, inputValues, expectedOutputValues, 1.f/20.f, 50, armnn::DataLayout::NCHW); } -LayerTestResult BatchNormUint8NhwcTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchNormUint8NhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { // BatchSize: 1 // Height: 3 @@ -5258,335 +5604,461 @@ LayerTestResult BatchNormUint8NhwcTest(armnn::IWorkloadFactory& work 6.f, 4.f }; - return BatchNormTestImpl(workloadFactory, inputOutputShape, inputValues, expectedOutputValues, + return BatchNormTestImpl(workloadFactory, memoryManager, + inputOutputShape, inputValues, expectedOutputValues, 1.f/20.f, 50, armnn::DataLayout::NHWC); } -LayerTestResult ConstantUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult ConstantUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return ConstantTestImpl(workloadFactory, 2e-6f, 1); + return ConstantTestImpl(workloadFactory, memoryManager, 2e-6f, 1); } -LayerTestResult Concatenation1dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation1dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation1dTestImpl(workloadFactory, 0.5f, -1); + return Concatenation1dTestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation2dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim0Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim0TestImpl(workloadFactory, 0.5f, -1); + return Concatenation2dDim0TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation2dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim1TestImpl(workloadFactory, 0.5f, -1); + return Concatenation2dDim1TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation2dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim0DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim0DiffInputDimsTestImpl(workloadFactory, 0.5f, -1); + return Concatenation2dDim0DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation2dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation2dDim1DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation2dDim1DiffInputDimsTestImpl(workloadFactory, 0.5f, -1); + return Concatenation2dDim1DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim0Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim0TestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim0TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim1TestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim1TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim2Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim2Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim2TestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim2TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim0DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim0TestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim0TestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim1DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim1DiffInputDimsTestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim1DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult Concatenation3dDim2DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult Concatenation3dDim2DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return Concatenation3dDim2DiffInputDimsTestImpl(workloadFactory, 0.5f, -1); + return Concatenation3dDim2DiffInputDimsTestImpl(workloadFactory, memoryManager, 0.5f, -1); } -LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding) +LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding) { - return SimpleMaxPooling2dSize2x2Stride2x2TestCommon(workloadFactory, forceNoPadding); + return SimpleMaxPooling2dSize2x2Stride2x2TestCommon(workloadFactory, memoryManager, forceNoPadding); } -LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding) +LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding) { - return SimpleMaxPooling2dSize2x2Stride2x2TestCommon(workloadFactory, forceNoPadding, 3.0f, -5); + return SimpleMaxPooling2dSize2x2Stride2x2TestCommon( + workloadFactory, memoryManager, forceNoPadding, 3.0f, -5); } -LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding) +LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding) { - return SimpleMaxPooling2dSize3x3Stride2x4TestCommon(workloadFactory, forceNoPadding); + return SimpleMaxPooling2dSize3x3Stride2x4TestCommon(workloadFactory, memoryManager, forceNoPadding); } -LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding) +LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding) { - return SimpleMaxPooling2dSize3x3Stride2x4TestCommon(workloadFactory, forceNoPadding, 0.1f, 128); + return SimpleMaxPooling2dSize3x3Stride2x4TestCommon( + workloadFactory, memoryManager, forceNoPadding, 0.1f, 128); } -LayerTestResult SimpleMaxPooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleMaxPooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleMaxPooling2dTestCommon(workloadFactory, dataLayout); + return SimpleMaxPooling2dTestCommon(workloadFactory, memoryManager, dataLayout); } -LayerTestResult SimpleMaxPooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleMaxPooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleMaxPooling2dTestCommon(workloadFactory, dataLayout); + return SimpleMaxPooling2dTestCommon(workloadFactory, memoryManager, dataLayout); } -LayerTestResult SimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleAveragePooling2dTestCommon(workloadFactory, dataLayout); + return SimpleAveragePooling2dTestCommon(workloadFactory, memoryManager, dataLayout); } -LayerTestResult SimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleAveragePooling2dTestCommon(workloadFactory, dataLayout, 0.5, -1); + return SimpleAveragePooling2dTestCommon( + workloadFactory, memoryManager, dataLayout, 0.5, -1); } -LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding) +LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding) { - return IgnorePaddingAveragePooling2dSize3x2Stride2x2TestCommon(workloadFactory, forceNoPadding); + return IgnorePaddingAveragePooling2dSize3x2Stride2x2TestCommon( + workloadFactory, memoryManager, forceNoPadding); } -LayerTestResult LargeTensorsAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult LargeTensorsAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return LargeTensorsAveragePooling2dTestCommon(workloadFactory); + return LargeTensorsAveragePooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult LargeTensorsAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult LargeTensorsAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return LargeTensorsAveragePooling2dTestCommon(workloadFactory, 0.5, -1); + return LargeTensorsAveragePooling2dTestCommon(workloadFactory, memoryManager, 0.5, -1); } -LayerTestResult SimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleL2Pooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleL2Pooling2dTestCommon(workloadFactory, dataLayout); + return SimpleL2Pooling2dTestCommon(workloadFactory, memoryManager, dataLayout); } -LayerTestResult SimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout) +LayerTestResult SimpleL2Pooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout) { - return SimpleL2Pooling2dTestCommon(workloadFactory, dataLayout); + return SimpleL2Pooling2dTestCommon(workloadFactory, memoryManager, dataLayout); } -LayerTestResult L2Pooling2dSize3Stride1Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride1TestCommon(workloadFactory); + return L2Pooling2dSize3Stride1TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize3Stride1Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride1TestCommon(workloadFactory); + return L2Pooling2dSize3Stride1TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize3Stride3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride3TestCommon(workloadFactory); + return L2Pooling2dSize3Stride3TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize3Stride3Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride3TestCommon(workloadFactory); + return L2Pooling2dSize3Stride3TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize3Stride4Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride4Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride4TestCommon(workloadFactory); + return L2Pooling2dSize3Stride4TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize3Stride4Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize3Stride4Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize3Stride4TestCommon(workloadFactory); + return L2Pooling2dSize3Stride4TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize7Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize7Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize7TestCommon(workloadFactory); + return L2Pooling2dSize7TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize7Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize7Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize7TestCommon(workloadFactory); + return L2Pooling2dSize7TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize9Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize9Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize9TestCommon(workloadFactory); + return L2Pooling2dSize9TestCommon(workloadFactory, memoryManager); } -LayerTestResult L2Pooling2dSize9Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult L2Pooling2dSize9Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return L2Pooling2dSize9TestCommon(workloadFactory); + return L2Pooling2dSize9TestCommon(workloadFactory, memoryManager); } -LayerTestResult AsymmetricNonSquarePooling2dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AsymmetricNonSquarePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AsymmetricNonSquarePooling2dTestCommon(workloadFactory); + return AsymmetricNonSquarePooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult AsymmetricNonSquarePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AsymmetricNonSquarePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return AsymmetricNonSquarePooling2dTestCommon(workloadFactory); + return AsymmetricNonSquarePooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult ComparePooling2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::PoolingAlgorithm poolingType) +LayerTestResult ComparePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::PoolingAlgorithm poolingType) { - return ComparePooling2dTestCommon(workloadFactory, refWorkloadFactory, poolingType); + return ComparePooling2dTestCommon( + workloadFactory, memoryManager, refWorkloadFactory, poolingType); } -LayerTestResult ComparePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::PoolingAlgorithm poolingType) +LayerTestResult ComparePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::PoolingAlgorithm poolingType) { - return ComparePooling2dTestCommon(workloadFactory, refWorkloadFactory, poolingType, 0.1f, 128); + return ComparePooling2dTestCommon( + workloadFactory, memoryManager, refWorkloadFactory, poolingType, 0.1f, 128); } -LayerTestResult FullyConnectedLargeTest(armnn::IWorkloadFactory& workloadFactory, - bool transposeWeights) +LayerTestResult FullyConnectedLargeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool transposeWeights) { - return FullyConnectedLargeTestCommon(workloadFactory, transposeWeights); + return FullyConnectedLargeTestCommon(workloadFactory, memoryManager, transposeWeights); } -LayerTestResult IgnorePaddingSimpleMaxPooling2dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleMaxPooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleMaxPooling2dTestCommon(workloadFactory); + return IgnorePaddingSimpleMaxPooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingSimpleMaxPooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleMaxPooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleMaxPooling2dTestCommon(workloadFactory, 1.0f, -5); + return IgnorePaddingSimpleMaxPooling2dTestCommon(workloadFactory, memoryManager, 1.0f, -5); } -LayerTestResult IgnorePaddingMaxPooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingMaxPooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingMaxPooling2dSize3TestCommon(workloadFactory); + return IgnorePaddingMaxPooling2dSize3TestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingMaxPooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingMaxPooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingMaxPooling2dSize3TestCommon(workloadFactory, 1.0f, -5); + return IgnorePaddingMaxPooling2dSize3TestCommon(workloadFactory, memoryManager, 1.0f, -5); } -LayerTestResult IgnorePaddingSimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleAveragePooling2dTestCommon(workloadFactory); + return IgnorePaddingSimpleAveragePooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingSimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleAveragePooling2dTestCommon(workloadFactory); + return IgnorePaddingSimpleAveragePooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(workloadFactory); + return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(workloadFactory, memoryManager); } LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test( - armnn::IWorkloadFactory& workloadFactory) + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(workloadFactory); + return IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingAveragePooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingAveragePooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingAveragePooling2dSize3TestCommon(workloadFactory); + return IgnorePaddingAveragePooling2dSize3TestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingAveragePooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingAveragePooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingAveragePooling2dSize3TestCommon(workloadFactory); + return IgnorePaddingAveragePooling2dSize3TestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingSimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleL2Pooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleL2Pooling2dTestCommon(workloadFactory); + return IgnorePaddingSimpleL2Pooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingSimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingSimpleL2Pooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingSimpleL2Pooling2dTestCommon(workloadFactory); + return IgnorePaddingSimpleL2Pooling2dTestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingL2Pooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingL2Pooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingL2Pooling2dSize3TestCommon(workloadFactory); + return IgnorePaddingL2Pooling2dSize3TestCommon(workloadFactory, memoryManager); } -LayerTestResult IgnorePaddingL2Pooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult IgnorePaddingL2Pooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return IgnorePaddingL2Pooling2dSize3TestCommon(workloadFactory); + return IgnorePaddingL2Pooling2dSize3TestCommon(workloadFactory, memoryManager); } -LayerTestResult SimplePermuteFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimplePermuteFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SimplePermuteFloat32TestCommon(workloadFactory); + return SimplePermuteFloat32TestCommon(workloadFactory, memoryManager); }; -LayerTestResult SimplePermuteUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimplePermuteUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SimplePermuteUint8TestCommon(workloadFactory); + return SimplePermuteUint8TestCommon(workloadFactory, memoryManager); }; -LayerTestResult PermuteFloat32ValueSet1Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PermuteFloat32ValueSet1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return PermuteFloat32ValueSet1TestCommon(workloadFactory); + return PermuteFloat32ValueSet1TestCommon(workloadFactory, memoryManager); }; -LayerTestResult PermuteFloat32ValueSet2Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PermuteFloat32ValueSet2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return PermuteFloat32ValueSet2TestCommon(workloadFactory); + return PermuteFloat32ValueSet2TestCommon(workloadFactory, memoryManager); }; -LayerTestResult PermuteFloat32ValueSet3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult PermuteFloat32ValueSet3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return PermuteFloat32ValueSet3TestCommon(workloadFactory); + return PermuteFloat32ValueSet3TestCommon(workloadFactory, memoryManager); }; namespace { template -LayerTestResult MeanTestHelper(armnn::IWorkloadFactory& workloadFactory, - const unsigned int* inputShape, - const std::vector& inputData, - const std::vector& axis, - bool keepDims, - const unsigned int* outputShape, - const std::vector& outputData, - float scale = 1.0f, - int32_t offset = 0) +LayerTestResult MeanTestHelper( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const unsigned int* inputShape, + const std::vector& inputData, + const std::vector& axis, + bool keepDims, + const unsigned int* outputShape, + const std::vector& outputData, + float scale = 1.0f, + int32_t offset = 0) { auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : armnn::DataType::Float32); @@ -5630,7 +6102,9 @@ LayerTestResult MeanTestHelper(armnn::IWorkloadFactory& workloadFa } // anonymous namespace -LayerTestResult MeanUint8SimpleTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanUint8SimpleTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 3, 2 }; const unsigned int outputShape[] = { 1 }; @@ -5638,10 +6112,13 @@ LayerTestResult MeanUint8SimpleTest(armnn::IWorkloadFactory& workloa std::vector input({ 1, 1, 2, 2, 3, 3 }); std::vector output({ 2 }); - return MeanTestHelper(workloadFactory, inputShape, input, {}, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output); } -LayerTestResult MeanUint8SimpleAxisTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanUint8SimpleAxisTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 1, 1, 3, 2 }; const unsigned int outputShape[] = { 1, 1, 2 }; @@ -5649,10 +6126,13 @@ LayerTestResult MeanUint8SimpleAxisTest(armnn::IWorkloadFactory& wor std::vector input({ 1, 1, 2, 2, 3, 3 }); std::vector output({ 2, 2 }); - return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output); } -LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanUint8KeepDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 1, 1, 3, 2 }; const unsigned int outputShape[] = { 1, 1, 1, 2 }; @@ -5660,10 +6140,13 @@ LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workl std::vector input({ 1, 1, 2, 2, 3, 3 }); std::vector output({ 2, 2 }); - return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, true, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output); } -LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanUint8MultipleDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 1, 3, 1, 1 }; @@ -5671,10 +6154,13 @@ LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& w std::vector input({ 1, 2, 3, 4, 5, 6, 1, 2, 3, 4, 5, 6 }); std::vector output({ 1, 3, 5 }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0, 3 }, true, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output); } -LayerTestResult MeanVtsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanVtsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 4, 3, 2 }; const unsigned int outputShape[] = { 2 }; @@ -5683,11 +6169,14 @@ LayerTestResult MeanVtsUint8Test(armnn::IWorkloadFactory& workloadFa 24 }); std::vector output({ 12, 13 }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0, 1 }, false, outputShape, + return MeanTestHelper(workloadFactory, memoryManager, + inputShape, input, { 0, 1 }, false, outputShape, output, 0.8f, 5); } -LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanFloatSimpleTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 3, 2 }; const unsigned int outputShape[] = { 1 }; @@ -5695,10 +6184,13 @@ LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadF std::vector input({ 1.0f, 1.0f, 2.0f, 2.0f, 3.0f, 3.0f }); std::vector output({ 2.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, {}, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, {}, false, outputShape, output); } -LayerTestResult MeanFloatSimpleAxisTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanFloatSimpleAxisTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 3, 1, 2 }; @@ -5706,10 +6198,13 @@ LayerTestResult MeanFloatSimpleAxisTest(armnn::IWorkloadFactory& workl std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); std::vector output({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0 }, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 0 }, false, outputShape, output); } -LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanFloatKeepDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 1, 1, 3, 2 }; const unsigned int outputShape[] = { 1, 1, 1, 2 }; @@ -5717,10 +6212,13 @@ LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloa std::vector input({ 1.0f, 1.0f, 2.0f, 2.0f, 3.0f, 3.0f }); std::vector output({ 2.0f, 2.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, true, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 2 }, true, outputShape, output); } -LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanFloatMultipleDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 2, 3, 1, 2 }; const unsigned int outputShape[] = { 1, 3, 1, 1 }; @@ -5728,10 +6226,13 @@ LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& wor std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f, 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f }); std::vector output({ 1.5f, 3.5f, 5.5f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0, 3 }, true, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 0, 3 }, true, outputShape, output); } -LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanVtsFloat1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 4, 3, 2 }; const unsigned int outputShape[] = { 2 }; @@ -5740,10 +6241,13 @@ LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFac 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }); std::vector output({ 12.0f, 13.0f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0, 1 }, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 0, 1 }, false, outputShape, output); } -LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanVtsFloat2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 4, 3, 2 }; const unsigned int outputShape[] = { 1, 3, 1 }; @@ -5752,10 +6256,13 @@ LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFac 15.0f, 16.0f, 17.0f, 18.0f, 19.0f, 20.0f, 21.0f, 22.0f, 23.0f, 24.0f }); std::vector output({ 10.5f, 12.5f, 14.5f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 0, 2 }, true, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 0, 2 }, true, outputShape, output); } -LayerTestResult MeanVtsFloat3Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult MeanVtsFloat3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = { 1, 2, 2, 1 }; const unsigned int outputShape[] = { 1, 2, 1 }; @@ -5763,10 +6270,13 @@ LayerTestResult MeanVtsFloat3Test(armnn::IWorkloadFactory& workloadFac std::vector input({ 1.0f, 2.0f, 3.0f, 4.0f }); std::vector output({ 1.5f, 3.5f }); - return MeanTestHelper(workloadFactory, inputShape, input, { 2 }, false, outputShape, output); + return MeanTestHelper( + workloadFactory, memoryManager, inputShape, input, { 2 }, false, outputShape, output); } -LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult AdditionAfterMaxPoolTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { // Create Initial Tensor // 1, 2, 3 @@ -5867,99 +6377,133 @@ LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& work return addRet; } -LayerTestResult SpaceToBatchNdSimpleFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdSimpleFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdSimpleTest(workloadFactory); + return SpaceToBatchNdSimpleTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiChannelsFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiChannelsFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiChannelsTest(workloadFactory); + return SpaceToBatchNdMultiChannelsTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiBlockFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiBlockFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiBlockTest(workloadFactory); + return SpaceToBatchNdMultiBlockTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdPaddingFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdPaddingFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdPaddingTest(workloadFactory); + return SpaceToBatchNdPaddingTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdSimpleUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdSimpleUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdSimpleTest(workloadFactory); + return SpaceToBatchNdSimpleTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiChannelsUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiChannelsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiChannelsTest(workloadFactory); + return SpaceToBatchNdMultiChannelsTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiBlockUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiBlockUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiBlockTest(workloadFactory); + return SpaceToBatchNdMultiBlockTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdPaddingUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdPaddingUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdPaddingTest(workloadFactory); + return SpaceToBatchNdPaddingTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdSimpleNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdSimpleNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdSimpleNHWCTest(workloadFactory); + return SpaceToBatchNdSimpleNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiChannelsNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiChannelsNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiChannelsNHWCTest(workloadFactory); + return SpaceToBatchNdMultiChannelsNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiBlockNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiBlockNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiBlockNHWCTest(workloadFactory); + return SpaceToBatchNdMultiBlockNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdPaddingNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdPaddingNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdPaddingNHWCTest(workloadFactory); + return SpaceToBatchNdPaddingNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdSimpleNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdSimpleNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdSimpleNHWCTest(workloadFactory); + return SpaceToBatchNdSimpleNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiChannelsNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiChannelsNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiChannelsNHWCTest(workloadFactory); + return SpaceToBatchNdMultiChannelsNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdMultiBlockNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiBlockNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiBlockNHWCTest(workloadFactory); + return SpaceToBatchNdMultiBlockNHWCTest(workloadFactory, memoryManager); } -LayerTestResult SpaceToBatchNdPaddingNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdPaddingNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdPaddingNHWCTest(workloadFactory); + return SpaceToBatchNdPaddingNHWCTest(workloadFactory, memoryManager); } namespace { template -LayerTestResult BatchToSpaceNdHelper(armnn::IWorkloadFactory &workloadFactory, - const armnn::DataLayout& dataLayout, - const unsigned int *inputShape, - const std::vector &inputData, - const std::vector &blockShape, - const std::vector> &crops, - const unsigned int *outputShape, - const std::vector &outputData, - float scale = 1.0f, - int32_t offset = 0) +LayerTestResult BatchToSpaceNdHelper( + armnn::IWorkloadFactory &workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayout& dataLayout, + const unsigned int *inputShape, + const std::vector &inputData, + const std::vector &blockShape, + const std::vector> &crops, + const unsigned int *outputShape, + const std::vector &outputData, + float scale = 1.0f, + int32_t offset = 0) { auto dataType = (std::is_same::value ? armnn::DataType::QuantisedAsymm8 : armnn::DataType::Float32); @@ -6004,7 +6548,9 @@ LayerTestResult BatchToSpaceNdHelper(armnn::IWorkloadFactory &work } // anonymous namespace -LayerTestResult BatchToSpaceNdNhwcFloat32Test1(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchToSpaceNdNhwcFloat32Test1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = {4, 2, 2, 1}; const unsigned int outputShape[] = {1, 4, 4, 1 }; @@ -6045,11 +6591,14 @@ LayerTestResult BatchToSpaceNdNhwcFloat32Test1(armnn::IWorkloadFactory std::vector blockShape {2, 2}; std::vector> crops = {{0, 0}, {0, 0}}; - return BatchToSpaceNdHelper(workloadFactory, armnn::DataLayout::NHWC, inputShape, input, blockShape, + return BatchToSpaceNdHelper(workloadFactory, memoryManager, + armnn::DataLayout::NHWC, inputShape, input, blockShape, crops, outputShape, expectedOutput); } -LayerTestResult BatchToSpaceNdNhwcFloat32Test2(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchToSpaceNdNhwcFloat32Test2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = {4, 1, 1, 1}; const unsigned int outputShape[] = {1, 2, 2, 1}; @@ -6065,11 +6614,14 @@ LayerTestResult BatchToSpaceNdNhwcFloat32Test2(armnn::IWorkloadFactory std::vector blockShape({2, 2}); std::vector> crops = {{0, 0}, {0, 0}}; - return BatchToSpaceNdHelper(workloadFactory, armnn::DataLayout::NHWC, inputShape, input, blockShape, - crops, outputShape, expectedOutput); + return BatchToSpaceNdHelper(workloadFactory, memoryManager, + armnn::DataLayout::NHWC, inputShape, input, blockShape, + crops, outputShape, expectedOutput); } -LayerTestResult BatchToSpaceNdNhwcFloat32Test3(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchToSpaceNdNhwcFloat32Test3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = {4, 1, 1, 3}; const unsigned int outputShape[] = {1, 2, 2, 3}; @@ -6081,11 +6633,14 @@ LayerTestResult BatchToSpaceNdNhwcFloat32Test3(armnn::IWorkloadFactory std::vector blockShape({2, 2}); std::vector> crops = {{0, 0}, {0, 0}}; - return BatchToSpaceNdHelper(workloadFactory, armnn::DataLayout::NHWC, inputShape, input, blockShape, - crops, outputShape, expectedOutput); + return BatchToSpaceNdHelper(workloadFactory, memoryManager, + armnn::DataLayout::NHWC, inputShape, input, blockShape, + crops, outputShape, expectedOutput); } -LayerTestResult BatchToSpaceNdNchwFloat32Test1(armnn::IWorkloadFactory &workloadFactory) +LayerTestResult BatchToSpaceNdNchwFloat32Test1( + armnn::IWorkloadFactory &workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = {4, 3, 1, 1}; const unsigned int outputShape[] = {1, 3, 2, 2}; @@ -6110,12 +6665,15 @@ LayerTestResult BatchToSpaceNdNchwFloat32Test1(armnn::IWorkloadFactory std::vector blockShape({2, 2}); std::vector> crops = {{0, 0}, {0, 0}}; - return BatchToSpaceNdHelper(workloadFactory, armnn::DataLayout::NCHW, inputShape, input, blockShape, - crops, outputShape, expectedOutput); + return BatchToSpaceNdHelper(workloadFactory, memoryManager, + armnn::DataLayout::NCHW, inputShape, input, blockShape, + crops, outputShape, expectedOutput); } -LayerTestResult BatchToSpaceNdNhwcUintTest1(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult BatchToSpaceNdNhwcUintTest1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const unsigned int inputShape[] = {4, 2, 2, 1}; const unsigned int outputShape[] = {1, 4, 4, 1}; @@ -6126,6 +6684,7 @@ LayerTestResult BatchToSpaceNdNhwcUintTest1(armnn::IWorkloadFactory& std::vector blockShape({2, 2}); std::vector> crops = {{0, 0}, {0, 0}}; - return BatchToSpaceNdHelper(workloadFactory, armnn::DataLayout::NHWC, inputShape, input, blockShape, - crops, outputShape, expectedOutput); -} \ No newline at end of file + return BatchToSpaceNdHelper(workloadFactory, memoryManager, + armnn::DataLayout::NHWC, inputShape, input, blockShape, + crops, outputShape, expectedOutput); +} diff --git a/src/backends/backendsCommon/test/LayerTests.hpp b/src/backends/backendsCommon/test/LayerTests.hpp index c38d84fac2..7734e5e1d6 100644 --- a/src/backends/backendsCommon/test/LayerTests.hpp +++ b/src/backends/backendsCommon/test/LayerTests.hpp @@ -9,6 +9,9 @@ #include +#include +#include + #include #include @@ -51,393 +54,948 @@ struct LayerTestResult bool supported; }; -LayerTestResult SimpleConvolution2d3x5Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); +LayerTestResult SimpleConvolution2d3x5Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); -LayerTestResult SimpleConvolution2d3x3Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); +LayerTestResult SimpleConvolution2d3x3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); -LayerTestResult SimpleConvolution2d3x3NhwcTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled); +LayerTestResult SimpleConvolution2d3x3NhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled); LayerTestResult -Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); -LayerTestResult Convolution2dAsymmetricPaddingTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); - - -LayerTestResult Convolution1dTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled); -LayerTestResult Convolution1dUint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled); - -LayerTestResult DepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult DepthwiseConvolution2dDepthNhwcTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled); - -LayerTestResult DepthwiseConvolution2dDepthMul1Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult DepthwiseConvolution2dAsymmetricTest(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding); -LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding); -LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding); -LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding ); -LayerTestResult IgnorePaddingSimpleMaxPooling2dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingSimpleMaxPooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingMaxPooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingMaxPooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleMaxPooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); -LayerTestResult SimpleMaxPooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); - -LayerTestResult SimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); -LayerTestResult SimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); - -LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2Test(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding); -LayerTestResult IgnorePaddingSimpleAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingSimpleAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTest(armnn::IWorkloadFactory& workloadFactory); +Convolution2dAsymmetricPaddingLargerThanHalfKernelSizeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult Convolution2dAsymmetricPaddingTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult Convolution1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled); + +LayerTestResult Convolution1dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled); + +LayerTestResult DepthwiseConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult DepthwiseConvolution2dDepthNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled); + +LayerTestResult DepthwiseConvolution2dDepthMul1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult DepthwiseConvolution2dAsymmetricTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding); + +LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding); + +LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding); + +LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding ); + +LayerTestResult IgnorePaddingSimpleMaxPooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingSimpleMaxPooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingMaxPooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingMaxPooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleMaxPooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult SimpleMaxPooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult SimpleAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult SimpleAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding); + +LayerTestResult IgnorePaddingSimpleAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingSimpleAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingUint8Test( - armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingAveragePooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingAveragePooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); -LayerTestResult SimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); - -LayerTestResult L2Pooling2dSize3Stride1Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize3Stride1Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize3Stride3Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize3Stride3Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize3Stride4Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize3Stride4Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize7Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize7Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize9Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult L2Pooling2dSize9Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult LargeTensorsAveragePooling2dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult LargeTensorsAveragePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult IgnorePaddingSimpleL2Pooling2dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingSimpleL2Pooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingL2Pooling2dSize3Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult IgnorePaddingL2Pooling2dSize3Uint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult AsymmetricNonSquarePooling2dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult AsymmetricNonSquarePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult ComparePooling2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::PoolingAlgorithm poolingType); -LayerTestResult ComparePooling2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::PoolingAlgorithm poolingType); - -LayerTestResult ConstantLinearActivationTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleNormalizationAcrossTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimpleNormalizationWithinTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimpleNormalizationAcrossNhwcTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, float beta); -LayerTestResult SimpleSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, float beta); - -LayerTestResult SimpleSigmoidTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleReshapeFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimpleReshapeUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleFloorTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult Concatenation1dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim0Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim1Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim0Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim1Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim2Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim0DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim1DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim2DiffInputDimsTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleSigmoidUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult CompareConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingAveragePooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingAveragePooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleL2Pooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult SimpleL2Pooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult L2Pooling2dSize3Stride1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize3Stride1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize3Stride3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize3Stride3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize3Stride4Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize3Stride4Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize7Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize7Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize9Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Pooling2dSize9Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult LargeTensorsAveragePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult LargeTensorsAveragePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingSimpleL2Pooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingSimpleL2Pooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingL2Pooling2dSize3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult IgnorePaddingL2Pooling2dSize3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult AsymmetricNonSquarePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult AsymmetricNonSquarePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ComparePooling2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::PoolingAlgorithm poolingType); + +LayerTestResult ComparePooling2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::PoolingAlgorithm poolingType); + +LayerTestResult ConstantLinearActivationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleNormalizationAcrossTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleNormalizationWithinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleNormalizationAcrossNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleSoftmaxTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float beta); + +LayerTestResult SimpleSoftmaxUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float beta); + +LayerTestResult SimpleSigmoidTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleReshapeFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleReshapeUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleFloorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim0Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim0DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim1DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim0Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim0DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim1DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim2DiffInputDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleSigmoidUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult CompareConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::IWorkloadFactory& refWorkloadFactory); template -LayerTestResult CompareDepthwiseConvolution2dTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - const armnn::DataLayoutIndexed& layout); +LayerTestResult CompareDepthwiseConvolution2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult CompareNormalizationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::NormalizationAlgorithmChannel normChannel, + armnn::NormalizationAlgorithmMethod normMethod); + +LayerTestResult CompareSoftmaxTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + float beta); + +LayerTestResult FullyConnectedFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + bool transposeWeights); -LayerTestResult CompareNormalizationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::NormalizationAlgorithmChannel normChannel, - armnn::NormalizationAlgorithmMethod normMethod); +std::vector> SplitterTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult CompareSoftmaxTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, float beta); +LayerTestResult CopyViaSplitterTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult FullyConnectedFloat32Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - bool transposeWeights); +LayerTestResult MergerTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -std::vector> SplitterTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult CopyViaSplitterTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult AdditionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult MergerTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult AdditionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult AdditionTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult AdditionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult AdditionBroadcastTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult AdditionBroadcastTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult CompareAdditionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory); -LayerTestResult CompareAdditionTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory); +LayerTestResult SubtractionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult SubtractionTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SubtractionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SubtractionBroadcastTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult SubtractionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SubtractionBroadcastTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult CompareActivationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::ActivationFunction f, + unsigned int batchSize); -LayerTestResult CompareActivationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::ActivationFunction f, - unsigned int batchSize); +LayerTestResult DivisionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult DivisionTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult DivisionByZeroTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult DivisionBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult DivisionBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult DivisionByZeroTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult MultiplicationTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MultiplicationBroadcast1ElementTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MultiplicationBroadcast1DVectorTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult DivisionBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult CompareMultiplicationTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory); +LayerTestResult DivisionBroadcast1DVectorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult MultiplicationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult CompareBatchNormTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory); +LayerTestResult MultiplicationBroadcast1ElementTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult BoundedReLuUpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BoundedReLuUpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BoundedReLuUint8UpperBoundOnlyTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult MultiplicationBroadcast1DVectorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult CompareBoundedReLuTest(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - float upperBound, - float lowerBound); +LayerTestResult CompareMultiplicationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory); + +LayerTestResult BatchNormTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchNormNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult CompareBatchNormTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory); + +LayerTestResult BoundedReLuUpperAndLowerBoundTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BoundedReLuUint8UpperAndLowerBoundTest( + armnn::IWorkloadFactory& workloadFactor, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManagery); + +LayerTestResult BoundedReLuUpperBoundOnlyTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BoundedReLuUint8UpperBoundOnlyTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult CompareBoundedReLuTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + float upperBound, + float lowerBound); // Tests that the output should be identical to the input when the output dimensions match the input ones. -LayerTestResult ResizeBilinearNopTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); +LayerTestResult ResizeBilinearNopTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); // Tests the behaviour of the resize bilinear operation when rescaling a 2x2 image into a 1x1 image. -LayerTestResult SimpleResizeBilinearTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); +LayerTestResult SimpleResizeBilinearTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); // Tests the resize bilinear for minification of a square input matrix (also: input dimensions are a // multiple of output dimensions). -LayerTestResult ResizeBilinearSqMinTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); +LayerTestResult ResizeBilinearSqMinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); // Tests the resize bilinear for minification (output dimensions smaller than input dimensions). -LayerTestResult ResizeBilinearMinTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); +LayerTestResult ResizeBilinearMinTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); // Tests the resize bilinear for magnification (output dimensions bigger than input dimensions). -LayerTestResult ResizeBilinearMagTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout); +LayerTestResult ResizeBilinearMagTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout); + +LayerTestResult BatchNormTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchNormNhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult FakeQuantizationTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult L2Normalization1dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult L2Normalization2dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult L2Normalization3dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult L2Normalization4dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult ConstantTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ConstantTestUint8( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BoundedReLuUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float upperBound); + +LayerTestResult BoundedReLuUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float upperBound, + float lowerBound); -LayerTestResult BatchNormTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BatchNormNhwcTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult FullyConnectedUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled); -LayerTestResult FakeQuantizationTest(armnn::IWorkloadFactory& workloadFactory); +std::vector> SplitterUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult L2Normalization1dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); -LayerTestResult L2Normalization2dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); -LayerTestResult L2Normalization3dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); -LayerTestResult L2Normalization4dTest(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& layout); +LayerTestResult CopyViaSplitterUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult ConstantTest(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult MergerUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult ConstantTestUint8(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult AdditionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult BoundedReLuUint8Test(armnn::IWorkloadFactory& workloadFactory, float upperBound); -LayerTestResult BoundedReLuUint8Test(armnn::IWorkloadFactory& workloadFactory, - float upperBound, - float lowerBound); +LayerTestResult AdditionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult FullyConnectedUint8Test(armnn::IWorkloadFactory& workloadFactory, bool biasEnabled); +LayerTestResult AdditionBroadcastUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -std::vector> SplitterUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult CopyViaSplitterUint8Test(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult SubtractionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult MergerUint8Test(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult SubtractionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult AdditionUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult AdditionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult AdditionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory); +LayerTestResult SubtractionBroadcastUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); -LayerTestResult SubtractionUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SubtractionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SubtractionBroadcastUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult CompareActivationUint8Test(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::ActivationFunction f); +LayerTestResult CompareActivationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::ActivationFunction f); -LayerTestResult CompareSoftmaxUint8Test(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult CompareSoftmaxUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::IWorkloadFactory& refWorkloadFactory, float beta); -LayerTestResult MultiplicationUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MultiplicationBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MultiplicationBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult DivisionUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult DivisionBroadcast1ElementUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult DivisionBroadcast1DVectorUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleConvolution2d3x5Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult SimpleConvolution2d3x3Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult DepthwiseConvolution2dUint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult DepthwiseConvolution2dDepthMul1Uint8Test(armnn::IWorkloadFactory& workloadFactory, - bool biasEnabled, - const armnn::DataLayoutIndexed& layout); - -LayerTestResult ConstantLinearActivationUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult ResizeBilinearNopUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimpleResizeBilinearUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult ResizeBilinearSqMinUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult ResizeBilinearMinUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult ResizeBilinearMagUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult BatchNormUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BatchNormUint8NhwcTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult ConstantUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult Concatenation1dUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation2dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim0Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim1Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim2Uint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim0DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim1DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult Concatenation3dDim2DiffInputDimsUint8Test(armnn::IWorkloadFactory& workloadFactory); - - -LayerTestResult FullyConnectedLargeTest(armnn::IWorkloadFactory& workloadFactory, - bool transposeWeights); -LayerTestResult SimplePermuteFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimplePermuteUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult PadUint82dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PadUint83dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PadUint84dTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult PadFloat322dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PadFloat323dTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PadFloat324dTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult PermuteFloat32ValueSet1Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PermuteFloat32ValueSet2Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult PermuteFloat32ValueSet3Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest - (armnn::IWorkloadFactory& workloadFactory); -LayerTestResult - LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult -LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SimpleConvertFp16ToFp32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SimpleConvertFp32ToFp16Test(armnn::IWorkloadFactory& workloadFactory); - - -LayerTestResult MeanUint8SimpleTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanUint8SimpleAxisTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanUint8KeepDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanUint8MultipleDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanVtsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanFloatSimpleTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanFloatSimpleAxisTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanFloatKeepDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanFloatMultipleDimsTest(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanVtsFloat1Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanVtsFloat2Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult MeanVtsFloat3Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult AdditionAfterMaxPoolTest(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SpaceToBatchNdSimpleFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiChannelsFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiBlockFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdPaddingFloat32Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SpaceToBatchNdSimpleUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiChannelsUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiBlockUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdPaddingUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SpaceToBatchNdSimpleNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiChannelsNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiBlockNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdPaddingNHWCFloat32Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult SpaceToBatchNdSimpleNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiChannelsNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdMultiBlockNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult SpaceToBatchNdPaddingNHWCUint8Test(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult BatchToSpaceNdNhwcFloat32Test1(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BatchToSpaceNdNhwcFloat32Test2(armnn::IWorkloadFactory& workloadFactory); -LayerTestResult BatchToSpaceNdNhwcFloat32Test3(armnn::IWorkloadFactory& workloadFactory); - -LayerTestResult BatchToSpaceNdNchwFloat32Test1(armnn::IWorkloadFactory &workloadFactory); - -LayerTestResult BatchToSpaceNdNhwcUintTest1(armnn::IWorkloadFactory &workloadFactory); \ No newline at end of file +LayerTestResult MultiplicationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MultiplicationBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MultiplicationBroadcast1DVectorUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult DivisionUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult DivisionBroadcast1ElementUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult DivisionBroadcast1DVectorUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleConvolution2d3x5Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult SimpleConvolution2d3x3Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult DepthwiseConvolution2dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult DepthwiseConvolution2dDepthMul1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool biasEnabled, + const armnn::DataLayoutIndexed& layout); + +LayerTestResult ConstantLinearActivationUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ResizeBilinearNopUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleResizeBilinearUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ResizeBilinearSqMinUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ResizeBilinearMinUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ResizeBilinearMagUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchNormUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchNormUint8NhwcTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult ConstantUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation1dUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim0Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim0DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation2dDim1DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim0Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim1Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim2Uint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim0DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim1DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult Concatenation3dDim2DiffInputDimsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult FullyConnectedLargeTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool transposeWeights); + +LayerTestResult SimplePermuteFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimplePermuteUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadUint82dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadUint83dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadUint84dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadFloat322dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadFloat323dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PadFloat324dTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PermuteFloat32ValueSet1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PermuteFloat32ValueSet2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult PermuteFloat32ValueSet3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult LstmLayerFloat32WithCifgWithPeepholeNoProjectionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult LstmLayerFloat32NoCifgNoPeepholeNoProjectionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult LstmLayerFloat32NoCifgWithPeepholeWithProjectionTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleConvertFp16ToFp32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SimpleConvertFp32ToFp16Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanUint8SimpleTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanUint8SimpleAxisTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanUint8KeepDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanUint8MultipleDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanVtsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanFloatSimpleTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanFloatSimpleAxisTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanFloatKeepDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanFloatMultipleDimsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanVtsFloat1Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanVtsFloat2Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult MeanVtsFloat3Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult AdditionAfterMaxPoolTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdSimpleFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiChannelsFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiBlockFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdPaddingFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdSimpleUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiChannelsUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiBlockUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdPaddingUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdSimpleNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiChannelsNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiBlockNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdPaddingNHWCFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdSimpleNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiChannelsNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdMultiBlockNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult SpaceToBatchNdPaddingNHWCUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchToSpaceNdNhwcFloat32Test1( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchToSpaceNdNhwcFloat32Test2( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchToSpaceNdNhwcFloat32Test3( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchToSpaceNdNchwFloat32Test1( + armnn::IWorkloadFactory &workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); + +LayerTestResult BatchToSpaceNdNhwcUintTest1( + armnn::IWorkloadFactory &workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager); diff --git a/src/backends/backendsCommon/test/LstmTestImpl.hpp b/src/backends/backendsCommon/test/LstmTestImpl.hpp index bb567e7901..dfe24aa541 100644 --- a/src/backends/backendsCommon/test/LstmTestImpl.hpp +++ b/src/backends/backendsCommon/test/LstmTestImpl.hpp @@ -5,6 +5,7 @@ #pragma once #include "QuantizeHelper.hpp" +#include "WorkloadTestUtils.hpp" #include #include @@ -15,9 +16,11 @@ #include #include -LayerTestResult LstmNoCifgNoPeepholeNoProjectionTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& outputExpected) +LayerTestResult LstmNoCifgNoPeepholeNoProjectionTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& outputExpected) { unsigned int batchSize = boost::numeric_cast(input.shape()[0]); unsigned int inputSize = boost::numeric_cast(input.shape()[1]); @@ -219,10 +222,12 @@ LayerTestResult LstmNoCifgNoPeepholeNoProjectionTestImpl(armnn::IWorkl LayerTestResult -LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& outputExpected) { - +LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& outputExpected) +{ unsigned int batchSize = 2; unsigned int outputSize = 16; unsigned int inputSize = 5; @@ -928,9 +933,11 @@ LstmLayerFloat32NoCifgWithPeepholeWithProjectionTestImpl(armnn::IWorkloadFactory } -LayerTestResult LstmLayerWithCifgWithPeepholeNoProjectionTestImpl(armnn::IWorkloadFactory& workloadFactory, - const boost::multi_array& input, - const boost::multi_array& outputExpected) +LayerTestResult LstmLayerWithCifgWithPeepholeNoProjectionTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const boost::multi_array& input, + const boost::multi_array& outputExpected) { bool cifgEnabled = true; bool peepholeEnabled = true; diff --git a/src/backends/backendsCommon/test/NormTestImpl.hpp b/src/backends/backendsCommon/test/NormTestImpl.hpp index 16893eb315..38a0053a56 100644 --- a/src/backends/backendsCommon/test/NormTestImpl.hpp +++ b/src/backends/backendsCommon/test/NormTestImpl.hpp @@ -3,16 +3,21 @@ // SPDX-License-Identifier: MIT // +#include "WorkloadTestUtils.hpp" + #include #include -#include "armnn/Types.hpp" +#include #include +#include #include -LayerTestResult SimpleNormalizationTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::NormalizationAlgorithmChannel normChannel, - armnn::NormalizationAlgorithmMethod normMethod) +LayerTestResult SimpleNormalizationTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::NormalizationAlgorithmChannel normChannel, + armnn::NormalizationAlgorithmMethod normMethod) { const unsigned int inputHeight = 2; const unsigned int inputWidth = 2; @@ -73,9 +78,7 @@ LayerTestResult SimpleNormalizationTestImpl(armnn::IWorkloadFactory& wo CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -153,9 +156,11 @@ LayerTestResult SimpleNormalizationTestImpl(armnn::IWorkloadFactory& wo return ret; } -LayerTestResult SimpleNormalizationNhwcTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::NormalizationAlgorithmChannel normChannel, - armnn::NormalizationAlgorithmMethod normMethod) +LayerTestResult SimpleNormalizationNhwcTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::NormalizationAlgorithmChannel normChannel, + armnn::NormalizationAlgorithmMethod normMethod) { const unsigned int inputHeight = 2; const unsigned int inputWidth = 2; @@ -216,9 +221,7 @@ LayerTestResult SimpleNormalizationNhwcTestImpl(armnn::IWorkloadFactory CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0][0][0], outputHandle.get()); @@ -254,10 +257,12 @@ LayerTestResult SimpleNormalizationNhwcTestImpl(armnn::IWorkloadFactory return ret; } -LayerTestResult CompareNormalizationTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::NormalizationAlgorithmChannel normChannel, - armnn::NormalizationAlgorithmMethod normMethod) +LayerTestResult CompareNormalizationTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::NormalizationAlgorithmChannel normChannel, + armnn::NormalizationAlgorithmMethod normMethod) { constexpr unsigned int inputNum = 5; constexpr unsigned int inputChannels = 3; @@ -332,9 +337,7 @@ LayerTestResult CompareNormalizationTestImpl(armnn::IWorkloadFactory& w CopyDataToITensorHandle(inputHandle.get(), &input[0][0][0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0][0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); workloadRef->Execute(); diff --git a/src/backends/backendsCommon/test/PermuteTestImpl.hpp b/src/backends/backendsCommon/test/PermuteTestImpl.hpp index 529f9d34e0..c8120a41d8 100644 --- a/src/backends/backendsCommon/test/PermuteTestImpl.hpp +++ b/src/backends/backendsCommon/test/PermuteTestImpl.hpp @@ -5,6 +5,7 @@ #pragma once #include "QuantizeHelper.hpp" +#include "WorkloadTestUtils.hpp" #include #include @@ -13,11 +14,13 @@ #include #include +#include #include template LayerTestResult SimplePermuteTestImpl( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::PermuteDescriptor descriptor, armnn::TensorInfo inputTensorInfo, armnn::TensorInfo outputTensorInfo, @@ -52,7 +55,9 @@ LayerTestResult SimplePermuteTestImpl( return ret; } -LayerTestResult SimplePermuteFloat32TestCommon(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimplePermuteFloat32TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -81,11 +86,14 @@ LayerTestResult SimplePermuteFloat32TestCommon(armnn::IWorkloadFactory 3.0f, 7.0f, 4.0f, 8.0f }); - return SimplePermuteTestImpl(workloadFactory, descriptor, inputTensorInfo, + return SimplePermuteTestImpl(workloadFactory, memoryManager, + descriptor, inputTensorInfo, outputTensorInfo, input, outputExpected); } -LayerTestResult SimplePermuteUint8TestCommon(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimplePermuteUint8TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -116,12 +124,15 @@ LayerTestResult SimplePermuteUint8TestCommon(armnn::IWorkloadFactory 3, 7, 4, 8 }); - return SimplePermuteTestImpl(workloadFactory, descriptor, inputTensorInfo, + return SimplePermuteTestImpl(workloadFactory, memoryManager, + descriptor, inputTensorInfo, outputTensorInfo, input, outputExpected); } LayerTestResult -PermuteFloat32ValueSet1TestCommon(armnn::IWorkloadFactory& workloadFactory) +PermuteFloat32ValueSet1TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -150,12 +161,15 @@ PermuteFloat32ValueSet1TestCommon(armnn::IWorkloadFactory& workloadFactory) 3.0f, 13.0f, 23.0f, 33.0f, }); - return SimplePermuteTestImpl(workloadFactory, descriptor, inputTensorInfo, + return SimplePermuteTestImpl(workloadFactory, memoryManager, + descriptor, inputTensorInfo, outputTensorInfo, input, outputExpected); } LayerTestResult -PermuteFloat32ValueSet2TestCommon(armnn::IWorkloadFactory& workloadFactory) +PermuteFloat32ValueSet2TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -184,12 +198,15 @@ PermuteFloat32ValueSet2TestCommon(armnn::IWorkloadFactory& workloadFactory) 31.0f, 32.0f, 33.0f, }); - return SimplePermuteTestImpl(workloadFactory, descriptor, inputTensorInfo, + return SimplePermuteTestImpl(workloadFactory, memoryManager, + descriptor, inputTensorInfo, outputTensorInfo, input, outputExpected); } LayerTestResult -PermuteFloat32ValueSet3TestCommon(armnn::IWorkloadFactory& workloadFactory) +PermuteFloat32ValueSet3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -220,6 +237,7 @@ PermuteFloat32ValueSet3TestCommon(armnn::IWorkloadFactory& workloadFactory) 3.0f, 13.0f, 23.0f, 33.0f, 43.0f, 53.0f, }); - return SimplePermuteTestImpl(workloadFactory, descriptor, inputTensorInfo, + return SimplePermuteTestImpl(workloadFactory, memoryManager, + descriptor, inputTensorInfo, outputTensorInfo, input, outputExpected); } diff --git a/src/backends/backendsCommon/test/Pooling2dTestImpl.hpp b/src/backends/backendsCommon/test/Pooling2dTestImpl.hpp index ded45ab999..2e851faaa7 100644 --- a/src/backends/backendsCommon/test/Pooling2dTestImpl.hpp +++ b/src/backends/backendsCommon/test/Pooling2dTestImpl.hpp @@ -4,6 +4,8 @@ // #pragma once +#include "WorkloadTestUtils.hpp" + #include "QuantizeHelper.hpp" #include @@ -11,6 +13,7 @@ #include #include +#include #include #include @@ -22,12 +25,14 @@ #include template -LayerTestResult SimplePooling2dTestImpl(armnn::IWorkloadFactory& workloadFactory, - armnn::Pooling2dDescriptor descriptor, - float qScale, - int32_t qOffset, - const boost::multi_array& input, - const boost::multi_array& outputExpected) +LayerTestResult SimplePooling2dTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::Pooling2dDescriptor descriptor, + float qScale, + int32_t qOffset, + const boost::multi_array& input, + const boost::multi_array& outputExpected) { const armnn::DataLayoutIndexed dataLayout = descriptor.m_DataLayout; auto heightIndex = dataLayout.GetHeightIndex(); @@ -109,10 +114,12 @@ LayerTestResult SimplePooling2dTestImpl(armnn::IWorkloadFactory& workloadF // batch size: 2 // template -LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4TestCommon(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; @@ -225,14 +232,17 @@ LayerTestResult SimpleMaxPooling2dSize3x3Stride2x4TestCommon(armnn::IWorkl })); } - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult SimpleMaxPooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - const armnn::DataLayoutIndexed& dataLayout = armnn::DataLayout::NCHW, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult SimpleMaxPooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + const armnn::DataLayoutIndexed& dataLayout = armnn::DataLayout::NCHW, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; @@ -291,14 +301,17 @@ LayerTestResult SimpleMaxPooling2dTestCommon(armnn::IWorkloadFactory& work auto outputExpected = MakeTensor(outputTensorInfo, outputData); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult SimpleAveragePooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayoutIndexed dataLayout = armnn::DataLayout::NCHW, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult SimpleAveragePooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayoutIndexed dataLayout = armnn::DataLayout::NCHW, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; @@ -357,13 +370,16 @@ LayerTestResult SimpleAveragePooling2dTestCommon(armnn::IWorkloadFactory& auto outputExpected = MakeTensor(outputTensorInfo, outputData); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult LargeTensorsAveragePooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult LargeTensorsAveragePooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; @@ -405,14 +421,17 @@ LayerTestResult LargeTensorsAveragePooling2dTestCommon(armnn::IWorkloadFac auto outputExpected = MakeTensor(outputTensorInfo, outputVec); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult SimpleL2Pooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayoutIndexed dataLayout = armnn::DataLayout::NCHW, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult SimpleL2Pooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayoutIndexed dataLayout = armnn::DataLayout::NCHW, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -462,13 +481,16 @@ LayerTestResult SimpleL2Pooling2dTestCommon(armnn::IWorkloadFactory& workl auto outputExpected = MakeTensor(outputTensorInfo, outputData); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult L2Pooling2dSize3Stride1TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult L2Pooling2dSize3Stride1TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -492,13 +514,16 @@ LayerTestResult L2Pooling2dSize3Stride1TestCommon(armnn::IWorkloadFactory& 3.0f, 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult L2Pooling2dSize3Stride3TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult L2Pooling2dSize3Stride3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -528,13 +553,16 @@ LayerTestResult L2Pooling2dSize3Stride3TestCommon(armnn::IWorkloadFactory& 3.0f, 3.0f, 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult L2Pooling2dSize3Stride4TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult L2Pooling2dSize3Stride4TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -561,13 +589,16 @@ LayerTestResult L2Pooling2dSize3Stride4TestCommon(armnn::IWorkloadFactory& 3.0f, 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult L2Pooling2dSize7TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult L2Pooling2dSize7TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -593,13 +624,16 @@ LayerTestResult L2Pooling2dSize7TestCommon(armnn::IWorkloadFactory& worklo 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult L2Pooling2dSize9TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult L2Pooling2dSize9TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -627,13 +661,16 @@ LayerTestResult L2Pooling2dSize9TestCommon(armnn::IWorkloadFactory& worklo 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult AsymmetricNonSquarePooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult AsymmetricNonSquarePooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::TensorInfo inputTensorInfo({ 1, 1, 1, 3 }, armnn::GetDataType()); armnn::TensorInfo outputTensorInfo({ 1, 1, 2, 2 }, armnn::GetDataType()); @@ -663,15 +700,18 @@ LayerTestResult AsymmetricNonSquarePooling2dTestCommon(armnn::IWorkloadFac 0.0f, 3.0f, 0.0f, 3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult ComparePooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - armnn::IWorkloadFactory& refWorkloadFactory, - armnn::PoolingAlgorithm poolingType, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult ComparePooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::IWorkloadFactory& refWorkloadFactory, + armnn::PoolingAlgorithm poolingType, + float qScale = 1.0f, + int32_t qOffset = 0) { const unsigned int inputWidth = 16; const unsigned int inputHeight = 32; @@ -777,10 +817,12 @@ LayerTestResult ComparePooling2dTestCommon(armnn::IWorkloadFactory& worklo // batch size: 1 // template -LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2TestCommon(armnn::IWorkloadFactory& workloadFactory, - bool forceNoPadding, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool forceNoPadding, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; @@ -792,8 +834,11 @@ LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2TestCommon(armnn::IWorkl descriptor.m_OutputShapeRounding = armnn::OutputShapeRounding::Floor; descriptor.m_PaddingMethod = armnn::PaddingMethod::Exclude; + unsigned int inputWidth = 4; + unsigned int inputHeight = 4; + unsigned int outputWidth = (inputWidth + descriptor.m_PadLeft + descriptor.m_PadRight + descriptor.m_StrideX - descriptor.m_PoolWidth) / descriptor.m_StrideX; @@ -841,7 +886,8 @@ LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2TestCommon(armnn::IWorkl forceNoPadding ? QuantizedVector(qScale, qOffset, expectedOutputDataNoPadding) : QuantizedVector(qScale, qOffset, expectedOutputDataWithPadding)); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } // @@ -856,6 +902,7 @@ LayerTestResult SimpleMaxPooling2dSize2x2Stride2x2TestCommon(armnn::IWorkl template LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2TestCommon( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, bool forceNoPadding, float qScale = 1.0f, int32_t qOffset = 0) @@ -917,14 +964,17 @@ LayerTestResult IgnorePaddingAveragePooling2dSize3x2Stride2x2TestCommon( forceNoPadding ? QuantizedVector(qScale, qOffset, expectedOutputDataNoPadding) : QuantizedVector(qScale, qOffset, expectedOutputDataWithPadding)); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingSimpleMaxPooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingSimpleMaxPooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; @@ -963,13 +1013,16 @@ LayerTestResult IgnorePaddingSimpleMaxPooling2dTestCommon(armnn::IWorkload 1.0f, 2.0f, -4.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingMaxPooling2dSize3TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingMaxPooling2dSize3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Max; @@ -1009,13 +1062,16 @@ LayerTestResult IgnorePaddingMaxPooling2dSize3TestCommon(armnn::IWorkloadF 2.0f, 2.0f, 2.0f, -3.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingSimpleAveragePooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingSimpleAveragePooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; @@ -1054,13 +1110,16 @@ LayerTestResult IgnorePaddingSimpleAveragePooling2dTestCommon(armnn::IWork 3.0f, 13.0f, 10.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; @@ -1099,13 +1158,16 @@ LayerTestResult IgnorePaddingSimpleAveragePooling2dNoPaddingTestCommon(arm 2.0f, 3.5f })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingAveragePooling2dSize3TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingAveragePooling2dSize3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::Average; @@ -1145,13 +1207,16 @@ LayerTestResult IgnorePaddingAveragePooling2dSize3TestCommon(armnn::IWorkl 9.0f, 11.0f, 12.0f, 7.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingSimpleL2Pooling2dTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingSimpleL2Pooling2dTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -1190,13 +1255,16 @@ LayerTestResult IgnorePaddingSimpleL2Pooling2dTestCommon(armnn::IWorkloadF 8.0f, 1.4142f, 4.0f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } template -LayerTestResult IgnorePaddingL2Pooling2dSize3TestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 1.0f, - int32_t qOffset = 0) +LayerTestResult IgnorePaddingL2Pooling2dSize3TestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 1.0f, + int32_t qOffset = 0) { armnn::Pooling2dDescriptor descriptor; descriptor.m_PoolType = armnn::PoolingAlgorithm::L2; @@ -1236,5 +1304,6 @@ LayerTestResult IgnorePaddingL2Pooling2dSize3TestCommon(armnn::IWorkloadFa 1.0540f, 1.7638f, 2.5385f, 2.3570f, })); - return SimplePooling2dTestImpl(workloadFactory, descriptor, qScale, qOffset, input, outputExpected); + return SimplePooling2dTestImpl( + workloadFactory, memoryManager, descriptor, qScale, qOffset, input, outputExpected); } diff --git a/src/backends/backendsCommon/test/ReshapeTestImpl.hpp b/src/backends/backendsCommon/test/ReshapeTestImpl.hpp index fee992deb6..49918c5cd1 100644 --- a/src/backends/backendsCommon/test/ReshapeTestImpl.hpp +++ b/src/backends/backendsCommon/test/ReshapeTestImpl.hpp @@ -5,12 +5,14 @@ #pragma once #include "QuantizeHelper.hpp" +#include "WorkloadTestUtils.hpp" #include #include #include #include +#include #include #include @@ -18,6 +20,7 @@ template LayerTestResult SimpleReshapeTestImpl( armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::TensorInfo inputTensorInfo, armnn::TensorInfo outputTensorInfo, const std::vector& inputData, @@ -50,7 +53,9 @@ LayerTestResult SimpleReshapeTestImpl( return ret; } -LayerTestResult SimpleReshapeFloat32Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleReshapeFloat32Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -91,10 +96,13 @@ LayerTestResult SimpleReshapeFloat32Test(armnn::IWorkloadFactory& work 27.0f, 28.0f, 29.0f, 30.0f, 31.0f, 32.0f, 33.0f, 34.0f, 35.0f, }); - return SimpleReshapeTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected); + return SimpleReshapeTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected); } -LayerTestResult SimpleFloorTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleFloorTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { const armnn::TensorInfo inputTensorInfo({1, 3, 2, 3}, armnn::DataType::Float32); const armnn::TensorInfo outputTensorInfo(inputTensorInfo); @@ -130,7 +138,9 @@ LayerTestResult SimpleFloorTest(armnn::IWorkloadFactory& workloadFacto return ret; } -LayerTestResult SimpleReshapeUint8Test(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SimpleReshapeUint8Test( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -173,5 +183,6 @@ LayerTestResult SimpleReshapeUint8Test(armnn::IWorkloadFactory& work 27, 28, 29, 30, 31, 32, 33, 34, 35, }); - return SimpleReshapeTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected); + return SimpleReshapeTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected); } diff --git a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp index 2a239866f7..97199e3c53 100644 --- a/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp +++ b/src/backends/backendsCommon/test/SoftmaxTestImpl.hpp @@ -5,12 +5,14 @@ #pragma once #include "QuantizeHelper.hpp" +#include "WorkloadTestUtils.hpp" #include #include #include #include +#include #include #include @@ -18,7 +20,10 @@ #include template -LayerTestResult SimpleSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFactory, float beta) +LayerTestResult SimpleSoftmaxTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float beta) { using std::exp; @@ -62,9 +67,7 @@ LayerTestResult SimpleSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFac outputHandle->Allocate(); CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); CopyDataFromITensorHandle(&ret.output[0][0], outputHandle.get()); @@ -85,7 +88,9 @@ LayerTestResult SimpleSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFac } template -LayerTestResult CompareSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFactory, +LayerTestResult CompareSoftmaxTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::IWorkloadFactory& refWorkloadFactory, float beta) { @@ -142,9 +147,7 @@ LayerTestResult CompareSoftmaxTestImpl(armnn::IWorkloadFactory& workloadFa CopyDataToITensorHandle(inputHandle.get(), &input[0][0]); CopyDataToITensorHandle(inputHandleRef.get(), &input[0][0]); - workloadFactory.Acquire(); - workload->Execute(); - workloadFactory.Release(); + ExecuteWorkload(*workload, memoryManager); workloadRef->Execute(); diff --git a/src/backends/backendsCommon/test/SpaceToBatchNdTestImpl.hpp b/src/backends/backendsCommon/test/SpaceToBatchNdTestImpl.hpp index 5dd21bf3c6..a467cd30cf 100644 --- a/src/backends/backendsCommon/test/SpaceToBatchNdTestImpl.hpp +++ b/src/backends/backendsCommon/test/SpaceToBatchNdTestImpl.hpp @@ -4,18 +4,22 @@ // #pragma once +#include "WorkloadTestUtils.hpp" + #include #include #include #include +#include #include #include template LayerTestResult SpaceToBatchNdTestImpl( - const armnn::IWorkloadFactory& workloadFactory, + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, armnn::TensorInfo& inputTensorInfo, armnn::TensorInfo& outputTensorInfo, std::vector& inputData, @@ -74,8 +78,10 @@ LayerTestResult SpaceToBatchNdTestImpl( } template -LayerTestResult SpaceToBatchNdSimpleTest(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) +LayerTestResult SpaceToBatchNdSimpleTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -101,12 +107,15 @@ LayerTestResult SpaceToBatchNdSimpleTest(armnn::IWorkloadFactory& workload 1.0f, 2.0f, 3.0f, 4.0f }); - return SpaceToBatchNdTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); + return SpaceToBatchNdTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); } template -LayerTestResult SpaceToBatchNdMultiChannelsTest(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) +LayerTestResult SpaceToBatchNdMultiChannelsTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -137,12 +146,15 @@ LayerTestResult SpaceToBatchNdMultiChannelsTest(armnn::IWorkloadFactory& w 10.0f, 11.0f, 12.0f }); - return SpaceToBatchNdTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); + return SpaceToBatchNdTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); } template -LayerTestResult SpaceToBatchNdMultiBlockTest(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) +LayerTestResult SpaceToBatchNdMultiBlockTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -174,12 +186,15 @@ LayerTestResult SpaceToBatchNdMultiBlockTest(armnn::IWorkloadFactory& work 6.0f, 8.0f, 14.0f, 16.0f }); - return SpaceToBatchNdTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); + return SpaceToBatchNdTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); } template -LayerTestResult SpaceToBatchNdPaddingTest(armnn::IWorkloadFactory& workloadFactory, - armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) +LayerTestResult SpaceToBatchNdPaddingTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + armnn::DataLayout dataLayout = armnn::DataLayout::NCHW) { armnn::TensorInfo inputTensorInfo; armnn::TensorInfo outputTensorInfo; @@ -215,29 +230,38 @@ LayerTestResult SpaceToBatchNdPaddingTest(armnn::IWorkloadFactory& workloa 0.0f, 14.0f, 16.0f }); - return SpaceToBatchNdTestImpl(workloadFactory, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); + return SpaceToBatchNdTestImpl( + workloadFactory, memoryManager, inputTensorInfo, outputTensorInfo, input, outputExpected, desc); } template -LayerTestResult SpaceToBatchNdSimpleNHWCTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdSimpleNHWCTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdSimpleTest(workloadFactory, armnn::DataLayout::NHWC); + return SpaceToBatchNdSimpleTest(workloadFactory, memoryManager, armnn::DataLayout::NHWC); } template -LayerTestResult SpaceToBatchNdMultiChannelsNHWCTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiChannelsNHWCTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiChannelsTest(workloadFactory, armnn::DataLayout::NHWC); + return SpaceToBatchNdMultiChannelsTest(workloadFactory, memoryManager, armnn::DataLayout::NHWC); } template -LayerTestResult SpaceToBatchNdMultiBlockNHWCTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdMultiBlockNHWCTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdMultiBlockTest(workloadFactory, armnn::DataLayout::NHWC); + return SpaceToBatchNdMultiBlockTest(workloadFactory, memoryManager, armnn::DataLayout::NHWC); } template -LayerTestResult SpaceToBatchNdPaddingNHWCTest(armnn::IWorkloadFactory& workloadFactory) +LayerTestResult SpaceToBatchNdPaddingNHWCTest( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { - return SpaceToBatchNdPaddingTest(workloadFactory, armnn::DataLayout::NHWC); + return SpaceToBatchNdPaddingTest(workloadFactory, memoryManager, armnn::DataLayout::NHWC); } diff --git a/src/backends/backendsCommon/test/SplitterTestImpl.hpp b/src/backends/backendsCommon/test/SplitterTestImpl.hpp index 677950cf2d..e88356ce21 100644 --- a/src/backends/backendsCommon/test/SplitterTestImpl.hpp +++ b/src/backends/backendsCommon/test/SplitterTestImpl.hpp @@ -4,19 +4,24 @@ // #pragma once +#include "WorkloadTestUtils.hpp" + #include #include #include +#include #include #include #include template -std::vector> SplitterTestCommon(armnn::IWorkloadFactory& workloadFactory, - float qScale = 0.0f, - int32_t qOffset = 0) +std::vector> SplitterTestCommon( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale = 0.0f, + int32_t qOffset = 0) { unsigned int inputWidth = 5; unsigned int inputHeight = 6; @@ -214,7 +219,7 @@ std::vector> SplitterTestCommon(armnn::IWorkloadFactory& wo CopyDataFromITensorHandle(&ret1.output[0][0][0], outputHandle1.get()); CopyDataFromITensorHandle(&ret2.output[0][0][0], outputHandle2.get()); -// // Do the second split. + // Do the second split. armnn::SplitterQueueDescriptor data2; armnn::WorkloadInfo info2; AddInputToWorkload(data2, info2, outputTensorInfo2, outputHandle2.get()); @@ -229,7 +234,7 @@ std::vector> SplitterTestCommon(armnn::IWorkloadFactory& wo outputHandle3->Allocate(); outputHandle4->Allocate(); - workload2->Execute(); + ExecuteWorkload(*workload2, memoryManager); CopyDataFromITensorHandle(&ret3.output[0][0][0], outputHandle3.get()); CopyDataFromITensorHandle(&ret4.output[0][0][0], outputHandle4.get()); @@ -241,7 +246,10 @@ std::vector> SplitterTestCommon(armnn::IWorkloadFactory& wo template -LayerTestResult CopyViaSplitterTestImpl(armnn::IWorkloadFactory& workloadFactory, float qScale, int32_t qOffset) +LayerTestResult CopyViaSplitterTestImpl( + armnn::IWorkloadFactory& workloadFactory, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + float qScale, int32_t qOffset) { const armnn::TensorInfo tensorInfo({ 3, 6, 5 }, armnn::GetDataType()); auto input = MakeTensor(tensorInfo, QuantizedVector(qScale, qOffset, diff --git a/src/backends/backendsCommon/test/WorkloadTestUtils.hpp b/src/backends/backendsCommon/test/WorkloadTestUtils.hpp index 05f6dde35f..d03c5a9210 100644 --- a/src/backends/backendsCommon/test/WorkloadTestUtils.hpp +++ b/src/backends/backendsCommon/test/WorkloadTestUtils.hpp @@ -6,12 +6,18 @@ #include +#include +#include +#include #include namespace armnn { class ITensorHandle; -} +} // namespace armnn + +namespace +{ template void AddInputToWorkload(QueueDescriptor& descriptor, @@ -53,4 +59,28 @@ void SetWorkloadOutput(QueueDescriptor& descriptor, { descriptor.m_Outputs[index] = tensorHandle; info.m_OutputTensorInfos[index] = tensorInfo; -} \ No newline at end of file +} + +inline void ExecuteWorkload(armnn::IWorkload& workload, + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager, + bool memoryManagementRequested = true) +{ + const bool manageMemory = memoryManager && memoryManagementRequested; + + // Acquire working memory (if needed) + if (manageMemory) + { + memoryManager->Acquire(); + } + + // Execute the workload + workload.Execute(); + + // Release working memory (if needed) + if (manageMemory) + { + memoryManager->Release(); + } +} + +} // anonymous namespace diff --git a/src/backends/cl/ClWorkloadFactory.cpp b/src/backends/cl/ClWorkloadFactory.cpp index 567954919d..1f112008c9 100644 --- a/src/backends/cl/ClWorkloadFactory.cpp +++ b/src/backends/cl/ClWorkloadFactory.cpp @@ -5,26 +5,22 @@ #include "ClWorkloadFactory.hpp" #include "ClBackendId.hpp" +#include + #include #include -#include #include -#include - -#ifdef ARMCOMPUTECL_ENABLED -#include -#include -#include - +#include #include #include #include #include -#endif -#include +#include +#include +#include #include #include @@ -50,8 +46,6 @@ const BackendId& ClWorkloadFactory::GetBackendId() const return s_Id; } -#ifdef ARMCOMPUTECL_ENABLED - template std::unique_ptr ClWorkloadFactory::MakeWorkload(const QueueDescriptorType& descriptor, const WorkloadInfo& info, @@ -320,232 +314,4 @@ std::unique_ptr ClWorkloadFactory::CreateBatchToSpaceNd(const BatchTo return MakeWorkload(descriptor, info); } -void ClWorkloadFactory::Release() -{ - m_MemoryManager->Release(); -} - -void ClWorkloadFactory::Acquire() -{ - m_MemoryManager->Acquire(); -} - -#else // #if ARMCOMPUTECL_ENABLED - -std::unique_ptr ClWorkloadFactory::CreateTensorHandle(const TensorInfo& tensorInfo) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateTensorHandle(const TensorInfo& tensorInfo, - DataLayout dataLayout) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateSubTensorHandle(ITensorHandle& parent, - TensorShape const& subTensorShape, - unsigned int const* subTensorOrigin) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateInput(const InputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateOutput(const OutputQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateActivation(const ActivationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateSoftmax(const SoftmaxQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateSplitter(const SplitterQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateMerger(const MergerQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateFullyConnected(const FullyConnectedQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreatePermute(const PermuteQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateConvolution2d(const Convolution2dQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateDepthwiseConvolution2d( - const DepthwiseConvolution2dQueueDescriptor& descriptor, const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateNormalization(const NormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateAddition(const AdditionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateMultiplication(const MultiplicationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateBatchNormalization( - const BatchNormalizationQueueDescriptor& descriptor, const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateMemCopy(const MemCopyQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateResizeBilinear(const ResizeBilinearQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateFakeQuantization(const FakeQuantizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateL2Normalization(const L2NormalizationQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateConstant(const ConstantQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateReshape(const ReshapeQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateSpaceToBatchNd(const SpaceToBatchNdQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateFloor(const FloorQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateLstm(const LstmQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateConvertFp16ToFp32( - const ConvertFp16ToFp32QueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateConvertFp32ToFp16( - const ConvertFp32ToFp16QueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateDivision(const DivisionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateSubtraction(const SubtractionQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateMean(const MeanQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreatePad(const PadQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -std::unique_ptr ClWorkloadFactory::CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, - const WorkloadInfo& info) const -{ - return nullptr; -} - -void ClWorkloadFactory::Release() -{ -} - -void ClWorkloadFactory::Acquire() -{ -} - -#endif // #if ARMCOMPUTECL_ENABLED - } // namespace armnn diff --git a/src/backends/cl/ClWorkloadFactory.hpp b/src/backends/cl/ClWorkloadFactory.hpp index cb715e1db9..d37a31ffa4 100644 --- a/src/backends/cl/ClWorkloadFactory.hpp +++ b/src/backends/cl/ClWorkloadFactory.hpp @@ -129,10 +129,6 @@ public: virtual std::unique_ptr CreateBatchToSpaceNd(const BatchToSpaceNdQueueDescriptor& descriptor, const WorkloadInfo& info) const override; - virtual void Release() override; - - virtual void Acquire() override; - private: template static std::unique_ptr MakeWorkload(const QueueDescriptorType& descriptor, diff --git a/src/backends/cl/test/ClCreateWorkloadTests.cpp b/src/backends/cl/test/ClCreateWorkloadTests.cpp index 978b3bce9a..b243ca8007 100644 --- a/src/backends/cl/test/ClCreateWorkloadTests.cpp +++ b/src/backends/cl/test/ClCreateWorkloadTests.cpp @@ -27,7 +27,8 @@ template static void ClCreateActivationWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateActivationWorkloadTest(factory, graph); @@ -57,7 +58,9 @@ template (factory, graph); // Checks that inputs/outputs are as we expect them (see definition of CreateArithmeticWorkloadTest). @@ -146,7 +149,8 @@ template static void ClCreateBatchNormalizationWorkloadTest(DataLayout dataLayout) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateBatchNormalizationWorkloadTest (factory, graph, dataLayout); @@ -195,7 +199,9 @@ BOOST_AUTO_TEST_CASE(CreateBatchNormalizationNhwcFloat16NhwcWorkload) BOOST_AUTO_TEST_CASE(CreateConvertFp16ToFp32Workload) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateConvertFp16ToFp32WorkloadTest(factory, graph); ConvertFp16ToFp32QueueDescriptor queueDescriptor = workload->GetData(); @@ -211,7 +217,9 @@ BOOST_AUTO_TEST_CASE(CreateConvertFp16ToFp32Workload) BOOST_AUTO_TEST_CASE(CreateConvertFp32ToFp16Workload) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateConvertFp32ToFp16WorkloadTest(factory, graph); ConvertFp32ToFp16QueueDescriptor queueDescriptor = workload->GetData(); @@ -228,7 +236,9 @@ template static void ClConvolution2dWorkloadTest(DataLayout dataLayout) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateConvolution2dWorkloadTest(factory, graph, dataLayout); @@ -270,7 +280,8 @@ template (factory, graph, dataLayout); @@ -300,7 +311,9 @@ template static void ClDirectConvolution2dWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateDirectConvolution2dWorkloadTest(factory, graph); // Checks that outputs and inputs are as we expect them (see definition of CreateDirectConvolution2dWorkloadTest). @@ -330,7 +343,9 @@ template (factory, graph); @@ -357,7 +372,9 @@ template static void ClNormalizationWorkloadTest(DataLayout dataLayout) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateNormalizationWorkloadTest(factory, graph, dataLayout); // Checks that inputs/outputs are as we expect them (see definition of CreateNormalizationWorkloadTest). @@ -398,7 +415,8 @@ template static void ClPooling2dWorkloadTest(DataLayout dataLayout) { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreatePooling2dWorkloadTest(factory, graph, dataLayout); @@ -440,7 +458,8 @@ template static void ClCreateReshapeWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateReshapeWorkloadTest(factory, graph); @@ -472,7 +491,8 @@ template static void ClSoftmaxWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateSoftmaxWorkloadTest(factory, graph); @@ -500,7 +520,8 @@ template static void ClSplitterWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workload = CreateSplitterWorkloadTest(factory, graph); @@ -541,7 +562,8 @@ static void ClSplitterMergerTest() // of the merger. Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); auto workloads = CreateSplitterMergerWorkloadTest @@ -590,7 +612,9 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs) // We create a splitter with two outputs. That each of those outputs is used by two different activation layers. Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + std::unique_ptr wlSplitter; std::unique_ptr wlActiv0_0; std::unique_ptr wlActiv0_1; @@ -625,7 +649,9 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs) BOOST_AUTO_TEST_CASE(CreateMemCopyWorkloadsCl) { - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + CreateMemCopyWorkloads(factory); } @@ -633,7 +659,9 @@ template (factory, graph, dataLayout); @@ -677,7 +705,9 @@ template static void ClCreateLstmWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateLstmWorkloadTest(factory, graph); LstmQueueDescriptor queueDescriptor = workload->GetData(); @@ -696,7 +726,8 @@ template (factory, graph, dataLayout); @@ -742,7 +773,9 @@ template static void ClMeanWorkloadTest() { Graph graph; - ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); + auto workload = CreateMeanWorkloadTest(factory, graph); // Checks that inputs/outputs are as we expect them (see definition of CreateMeanWorkloadTest). diff --git a/src/backends/cl/test/ClLayerSupportTests.cpp b/src/backends/cl/test/ClLayerSupportTests.cpp index 2218d821ef..acfd8c3483 100644 --- a/src/backends/cl/test/ClLayerSupportTests.cpp +++ b/src/backends/cl/test/ClLayerSupportTests.cpp @@ -23,19 +23,22 @@ BOOST_AUTO_TEST_SUITE(ClLayerSupport) BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat16Cl, ClContextControlFixture) { - armnn::ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + armnn::ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } BOOST_FIXTURE_TEST_CASE(IsLayerSupportedFloat32Cl, ClContextControlFixture) { - armnn::ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + armnn::ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } BOOST_FIXTURE_TEST_CASE(IsLayerSupportedUint8Cl, ClContextControlFixture) { - armnn::ClWorkloadFactory factory = ClWorkloadFactoryHelper::GetFactory(); + armnn::ClWorkloadFactory factory = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); IsLayerSupportedTests(&factory); } diff --git a/src/backends/cl/test/ClOptimizedNetworkTests.cpp b/src/backends/cl/test/ClOptimizedNetworkTests.cpp index 7e321470c1..f8c1a327ef 100644 --- a/src/backends/cl/test/ClOptimizedNetworkTests.cpp +++ b/src/backends/cl/test/ClOptimizedNetworkTests.cpp @@ -34,7 +34,8 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateGpuDeviceSupportLayerNoFallback) armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec()); BOOST_CHECK(optNet); // validate workloads - armnn::ClWorkloadFactory fact = ClWorkloadFactoryHelper::GetFactory(); + armnn::ClWorkloadFactory fact = + ClWorkloadFactoryHelper::GetFactory(ClWorkloadFactoryHelper::GetMemoryManager()); for (auto&& layer : static_cast(optNet.get())->GetGraph()) { BOOST_CHECK(layer->GetBackendId() == armnn::Compute::GpuAcc); diff --git a/src/backends/cl/test/ClWorkloadFactoryHelper.hpp b/src/backends/cl/test/ClWorkloadFactoryHelper.hpp index 7b60b8ad15..777bc84b8a 100644 --- a/src/backends/cl/test/ClWorkloadFactoryHelper.hpp +++ b/src/backends/cl/test/ClWorkloadFactoryHelper.hpp @@ -9,10 +9,9 @@ #include #include +#include #include -#include - #include namespace @@ -21,11 +20,15 @@ namespace template<> struct WorkloadFactoryHelper { - static armnn::ClWorkloadFactory GetFactory() + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() { - armnn::IBackendInternal::IMemoryManagerSharedPtr memoryManager = - std::make_shared(std::make_unique()); + armnn::ClBackend backend; + return backend.CreateMemoryManager(); + } + static armnn::ClWorkloadFactory GetFactory( + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) + { return armnn::ClWorkloadFactory(boost::polymorphic_pointer_downcast(memoryManager)); } }; diff --git a/src/backends/cl/test/OpenClTimerTest.cpp b/src/backends/cl/test/OpenClTimerTest.cpp index 6e55be6c3d..6f44cc4772 100644 --- a/src/backends/cl/test/OpenClTimerTest.cpp +++ b/src/backends/cl/test/OpenClTimerTest.cpp @@ -44,7 +44,8 @@ using FactoryType = ClWorkloadFactory; BOOST_AUTO_TEST_CASE(OpenClTimerBatchNorm) { - ClWorkloadFactory workloadFactory = ClWorkloadFactoryHelper::GetFactory(); + auto memoryManager = ClWorkloadFactoryHelper::GetMemoryManager(); + ClWorkloadFactory workloadFactory = ClWorkloadFactoryHelper::GetFactory(memoryManager); const unsigned int width = 2; const unsigned int height = 3; 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)); } diff --git a/src/backends/reference/test/RefWorkloadFactoryHelper.hpp b/src/backends/reference/test/RefWorkloadFactoryHelper.hpp index 500511157f..b49a6dd3d5 100644 --- a/src/backends/reference/test/RefWorkloadFactoryHelper.hpp +++ b/src/backends/reference/test/RefWorkloadFactoryHelper.hpp @@ -16,7 +16,14 @@ namespace template<> struct WorkloadFactoryHelper { - static armnn::RefWorkloadFactory GetFactory() + static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager() + { + armnn::RefBackend backend; + return backend.CreateMemoryManager(); + } + + static armnn::RefWorkloadFactory GetFactory( + const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager = nullptr) { return armnn::RefWorkloadFactory(); } -- cgit v1.2.1