aboutsummaryrefslogtreecommitdiff
path: root/src/backends/neon/test
diff options
context:
space:
mode:
Diffstat (limited to 'src/backends/neon/test')
-rw-r--r--src/backends/neon/test/NeonCreateWorkloadTests.cpp80
-rw-r--r--src/backends/neon/test/NeonLayerSupportTests.cpp9
-rw-r--r--src/backends/neon/test/NeonOptimizedNetworkTests.cpp4
-rw-r--r--src/backends/neon/test/NeonTimerTest.cpp3
-rw-r--r--src/backends/neon/test/NeonWorkloadFactoryHelper.hpp14
5 files changed, 71 insertions, 39 deletions
diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
index 07953bf86f..61160e2195 100644
--- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp
+++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
@@ -58,7 +58,9 @@ template <typename armnn::DataType DataType>
static void NeonCreateActivationWorkloadTest()
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateActivationWorkloadTest<NeonActivationWorkload, DataType>(factory, graph);
// Checks that inputs/outputs are as we expect them (see definition of CreateActivationWorkloadTest).
@@ -88,7 +90,9 @@ template <typename WorkloadType,
static void NeonCreateArithmethicWorkloadTest()
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateArithmeticWorkloadTest<WorkloadType, DescriptorType, LayerType, DataType>(factory, graph);
DescriptorType queueDescriptor = workload->GetData();
@@ -157,8 +161,10 @@ BOOST_AUTO_TEST_CASE(CreateMultiplicationFloatWorkload)
template <typename BatchNormalizationWorkloadType, typename armnn::DataType DataType>
static void NeonCreateBatchNormalizationWorkloadTest(DataLayout dataLayout)
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateBatchNormalizationWorkloadTest<BatchNormalizationWorkloadType, DataType>
(factory, graph, dataLayout);
@@ -199,10 +205,11 @@ BOOST_AUTO_TEST_CASE(CreateBatchNormalizationFloatNhwcWorkload)
template <typename armnn::DataType DataType>
static void NeonCreateConvolution2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW)
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
- auto workload = CreateConvolution2dWorkloadTest<NeonConvolution2dWorkload,
- DataType>(factory, graph, dataLayout);
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
+ auto workload = CreateConvolution2dWorkloadTest<NeonConvolution2dWorkload, DataType>(factory, graph, dataLayout);
TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{2, 3, 8, 16} : TensorShape{2, 8, 16, 3};
TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{2, 2, 2, 10} : TensorShape{2, 2, 10, 2};
@@ -241,7 +248,8 @@ template <typename armnn::DataType DataType>
static void NeonCreateDepthWiseConvolutionWorkloadTest(DataLayout dataLayout)
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
auto workload = CreateDepthwiseConvolution2dWorkloadTest<NeonDepthwiseConvolutionWorkload,
DataType>(factory, graph, dataLayout);
@@ -277,10 +285,11 @@ BOOST_AUTO_TEST_CASE(CreateDepthWiseConvolution2dFloat16NhwcWorkload)
template <typename FullyConnectedWorkloadType, typename armnn::DataType DataType>
static void NeonCreateFullyConnectedWorkloadTest()
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
- auto workload = CreateFullyConnectedWorkloadTest<FullyConnectedWorkloadType,
- DataType>(factory, graph);
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
+ auto workload = CreateFullyConnectedWorkloadTest<FullyConnectedWorkloadType, DataType>(factory, graph);
// Checks that outputs and inputs are as we expect them (see definition of CreateFullyConnectedWorkloadTest).
FullyConnectedQueueDescriptor queueDescriptor = workload->GetData();
@@ -306,7 +315,9 @@ template <typename NormalizationWorkloadType, typename armnn::DataType DataType>
static void NeonCreateNormalizationWorkloadTest(DataLayout dataLayout)
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateNormalizationWorkloadTest<NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
// Checks that outputs and inputs are as we expect them (see definition of CreateNormalizationWorkloadTest).
@@ -347,10 +358,11 @@ BOOST_AUTO_TEST_CASE(CreateNormalizationFloatNhwcWorkload)
template <typename armnn::DataType DataType>
static void NeonCreatePooling2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW)
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
- auto workload = CreatePooling2dWorkloadTest<NeonPooling2dWorkload, DataType>
- (factory, graph, dataLayout);
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
+ auto workload = CreatePooling2dWorkloadTest<NeonPooling2dWorkload, DataType>(factory, graph, dataLayout);
TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 2, 5, 5} : TensorShape{3, 5, 5, 2};
TensorShape outputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 2, 2, 4} : TensorShape{3, 2, 4, 2};
@@ -393,9 +405,11 @@ BOOST_AUTO_TEST_CASE(CreatePooling2dUint8NhwcWorkload)
template <typename armnn::DataType DataType>
static void NeonCreateReshapeWorkloadTest()
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
- auto workload = CreateReshapeWorkloadTest<NeonReshapeWorkload, DataType>(factory, graph);
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
+ auto workload = CreateReshapeWorkloadTest<NeonReshapeWorkload, DataType>(factory, graph);
// Checks that outputs and inputs are as we expect them (see definition of CreateReshapeWorkloadTest).
ReshapeQueueDescriptor queueDescriptor = workload->GetData();
@@ -425,8 +439,10 @@ BOOST_AUTO_TEST_CASE(CreateReshapeUint8Workload)
template <typename SoftmaxWorkloadType, typename armnn::DataType DataType>
static void NeonCreateSoftmaxWorkloadTest()
{
- Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ Graph graph;
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateSoftmaxWorkloadTest<SoftmaxWorkloadType, DataType>(factory, graph);
// Checks that outputs and inputs are as we expect them (see definition of CreateSoftmaxWorkloadTest).
@@ -452,7 +468,9 @@ BOOST_AUTO_TEST_CASE(CreateSoftmaxFloatWorkload)
BOOST_AUTO_TEST_CASE(CreateSplitterWorkload)
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload = CreateSplitterWorkloadTest<NeonSplitterWorkload, DataType::Float32>(factory, graph);
// Checks that outputs are as we expect them (see definition of CreateSplitterWorkloadTest).
@@ -479,7 +497,8 @@ BOOST_AUTO_TEST_CASE(CreateSplitterMerger)
// of the merger.
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
auto workloads =
CreateSplitterMergerWorkloadTest<NeonSplitterWorkload, NeonMergerWorkload,
@@ -510,7 +529,9 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs)
// We created a splitter with two outputs. That each of those outputs is used by two different activation layers
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
std::unique_ptr<NeonSplitterWorkload> wlSplitter;
std::unique_ptr<NeonActivationWorkload> wlActiv0_0;
std::unique_ptr<NeonActivationWorkload> wlActiv0_1;
@@ -544,7 +565,8 @@ BOOST_AUTO_TEST_CASE(CreateSingleOutputMultipleInputs)
BOOST_AUTO_TEST_CASE(CreateMemCopyWorkloadsNeon)
{
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
CreateMemCopyWorkloads<INeonTensorHandle>(factory);
}
@@ -552,7 +574,9 @@ template <typename L2NormalizationWorkloadType, typename armnn::DataType DataTyp
static void NeonCreateL2NormalizationWorkloadTest(DataLayout dataLayout)
{
Graph graph;
- NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
auto workload =
CreateL2NormalizationWorkloadTest<L2NormalizationWorkloadType, DataType>(factory, graph, dataLayout);
diff --git a/src/backends/neon/test/NeonLayerSupportTests.cpp b/src/backends/neon/test/NeonLayerSupportTests.cpp
index 56955432b6..c6d2731fd2 100644
--- a/src/backends/neon/test/NeonLayerSupportTests.cpp
+++ b/src/backends/neon/test/NeonLayerSupportTests.cpp
@@ -22,19 +22,22 @@ BOOST_AUTO_TEST_SUITE(NeonLayerSupport)
BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat16Neon)
{
- armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ armnn::NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
IsLayerSupportedTests<armnn::NeonWorkloadFactory, armnn::DataType::Float16>(&factory);
}
BOOST_AUTO_TEST_CASE(IsLayerSupportedFloat32Neon)
{
- armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ armnn::NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
IsLayerSupportedTests<armnn::NeonWorkloadFactory, armnn::DataType::Float32>(&factory);
}
BOOST_AUTO_TEST_CASE(IsLayerSupportedUint8Neon)
{
- armnn::NeonWorkloadFactory factory = NeonWorkloadFactoryHelper::GetFactory();
+ armnn::NeonWorkloadFactory factory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
IsLayerSupportedTests<armnn::NeonWorkloadFactory, armnn::DataType::QuantisedAsymm8>(&factory);
}
diff --git a/src/backends/neon/test/NeonOptimizedNetworkTests.cpp b/src/backends/neon/test/NeonOptimizedNetworkTests.cpp
index b6f479804a..09e231bfd7 100644
--- a/src/backends/neon/test/NeonOptimizedNetworkTests.cpp
+++ b/src/backends/neon/test/NeonOptimizedNetworkTests.cpp
@@ -33,7 +33,9 @@ BOOST_AUTO_TEST_CASE(OptimizeValidateCpuAccDeviceSupportLayerNoFallback)
armnn::IOptimizedNetworkPtr optNet = armnn::Optimize(*net, backends, runtime->GetDeviceSpec());
BOOST_CHECK(optNet);
// validate workloads
- armnn::NeonWorkloadFactory fact = NeonWorkloadFactoryHelper::GetFactory();
+ armnn::NeonWorkloadFactory fact =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
+
for (auto&& layer : static_cast<armnn::OptimizedNetwork*>(optNet.get())->GetGraph())
{
BOOST_CHECK(layer->GetBackendId() == armnn::Compute::CpuAcc);
diff --git a/src/backends/neon/test/NeonTimerTest.cpp b/src/backends/neon/test/NeonTimerTest.cpp
index a2bf4a95e5..3503c961f5 100644
--- a/src/backends/neon/test/NeonTimerTest.cpp
+++ b/src/backends/neon/test/NeonTimerTest.cpp
@@ -37,7 +37,8 @@ BOOST_AUTO_TEST_CASE(NeonTimerGetName)
BOOST_AUTO_TEST_CASE(NeonTimerMeasure)
{
- NeonWorkloadFactory workloadFactory = NeonWorkloadFactoryHelper::GetFactory();
+ NeonWorkloadFactory workloadFactory =
+ NeonWorkloadFactoryHelper::GetFactory(NeonWorkloadFactoryHelper::GetMemoryManager());
unsigned int inputWidth = 4000u;
unsigned int inputHeight = 5000u;
diff --git a/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp b/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp
index bcf9c57a16..7a6df11d7f 100644
--- a/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp
+++ b/src/backends/neon/test/NeonWorkloadFactoryHelper.hpp
@@ -9,10 +9,9 @@
#include <backendsCommon/IMemoryManager.hpp>
#include <backendsCommon/test/WorkloadFactoryHelper.hpp>
+#include <neon/NeonBackend.hpp>
#include <neon/NeonWorkloadFactory.hpp>
-#include <arm_compute/runtime/Allocator.h>
-
#include <boost/polymorphic_pointer_cast.hpp>
namespace
@@ -21,12 +20,15 @@ namespace
template<>
struct WorkloadFactoryHelper<armnn::NeonWorkloadFactory>
{
- static armnn::NeonWorkloadFactory GetFactory()
+ static armnn::IBackendInternal::IMemoryManagerSharedPtr GetMemoryManager()
{
- armnn::IBackendInternal::IMemoryManagerSharedPtr memoryManager =
- std::make_shared<armnn::NeonMemoryManager>(std::make_unique<arm_compute::Allocator>(),
- armnn::BaseMemoryManager::MemoryAffinity::Offset);
+ armnn::NeonBackend backend;
+ return backend.CreateMemoryManager();
+ }
+ static armnn::NeonWorkloadFactory GetFactory(
+ const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager)
+ {
return armnn::NeonWorkloadFactory(
boost::polymorphic_pointer_downcast<armnn::NeonMemoryManager>(memoryManager));
}