aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNattapat Chaimanowong <nattapat.chaimanowong@arm.com>2018-10-12 16:03:56 +0100
committerMatthew Bentham <matthew.bentham@arm.com>2018-10-22 16:57:53 +0100
commit5d2e700a223dab7432a765c64d0bd483a8acdfae (patch)
tree34527aecf46dd5c35ffe98c2e3fd2fb6387d5105
parent14766d76d06c43d9e4a16a319b0e720ff4318a64 (diff)
downloadarmnn-5d2e700a223dab7432a765c64d0bd483a8acdfae.tar.gz
IVGCVSW-1951 Remove type templating from NeonPooling2dWorkload
Change-Id: I65129a72d7585776797cfe0947a2a0f1f483b72f
-rw-r--r--src/backends/neon/NeonLayerSupport.cpp2
-rw-r--r--src/backends/neon/NeonWorkloadFactory.cpp2
-rw-r--r--src/backends/neon/backend.mk4
-rw-r--r--src/backends/neon/test/NeonCreateWorkloadTests.cpp14
-rw-r--r--src/backends/neon/workloads/CMakeLists.txt8
-rw-r--r--src/backends/neon/workloads/NeonPooling2dBaseWorkload.hpp37
-rw-r--r--src/backends/neon/workloads/NeonPooling2dFloatWorkload.cpp27
-rw-r--r--src/backends/neon/workloads/NeonPooling2dFloatWorkload.hpp25
-rw-r--r--src/backends/neon/workloads/NeonPooling2dUint8Workload.cpp26
-rw-r--r--src/backends/neon/workloads/NeonPooling2dUint8Workload.hpp25
-rw-r--r--src/backends/neon/workloads/NeonPooling2dWorkload.cpp (renamed from src/backends/neon/workloads/NeonPooling2dBaseWorkload.cpp)19
-rw-r--r--src/backends/neon/workloads/NeonPooling2dWorkload.hpp30
-rw-r--r--src/backends/neon/workloads/NeonWorkloads.hpp4
13 files changed, 53 insertions, 170 deletions
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp
index 68118a2a94..a044e04f42 100644
--- a/src/backends/neon/NeonLayerSupport.cpp
+++ b/src/backends/neon/NeonLayerSupport.cpp
@@ -25,7 +25,7 @@
#include "workloads/NeonNormalizationFloatWorkload.hpp"
#include "workloads/NeonFullyConnectedWorkload.hpp"
#include "workloads/NeonPermuteWorkload.hpp"
-#include "workloads/NeonPooling2dBaseWorkload.hpp"
+#include "workloads/NeonPooling2dWorkload.hpp"
#include "workloads/NeonSoftmaxBaseWorkload.hpp"
#include "workloads/NeonSubtractionFloatWorkload.hpp"
#endif
diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp
index 0f386d129d..f133f2bdc3 100644
--- a/src/backends/neon/NeonWorkloadFactory.cpp
+++ b/src/backends/neon/NeonWorkloadFactory.cpp
@@ -129,7 +129,7 @@ std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePermute(const Permu
std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreatePooling2d(const Pooling2dQueueDescriptor& descriptor,
const WorkloadInfo& info) const
{
- return MakeWorkload<NeonPooling2dFloatWorkload, NeonPooling2dUint8Workload>(descriptor, info);
+ return std::make_unique<NeonPooling2dWorkload>(descriptor, info);
}
std::unique_ptr<armnn::IWorkload> NeonWorkloadFactory::CreateConvolution2d(
diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk
index 26bf33e2f5..132328ba72 100644
--- a/src/backends/neon/backend.mk
+++ b/src/backends/neon/backend.mk
@@ -31,9 +31,7 @@ BACKEND_SOURCES := \
workloads/NeonMultiplicationFloatWorkload.cpp \
workloads/NeonNormalizationFloatWorkload.cpp \
workloads/NeonPermuteWorkload.cpp \
- workloads/NeonPooling2dBaseWorkload.cpp \
- workloads/NeonPooling2dFloatWorkload.cpp \
- workloads/NeonPooling2dUint8Workload.cpp \
+ workloads/NeonPooling2dWorkload.cpp \
workloads/NeonReshapeWorkload.cpp \
workloads/NeonSoftmaxBaseWorkload.cpp \
workloads/NeonSoftmaxFloatWorkload.cpp \
diff --git a/src/backends/neon/test/NeonCreateWorkloadTests.cpp b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
index e8790c3ae2..2c4d0ae0f9 100644
--- a/src/backends/neon/test/NeonCreateWorkloadTests.cpp
+++ b/src/backends/neon/test/NeonCreateWorkloadTests.cpp
@@ -324,12 +324,12 @@ BOOST_AUTO_TEST_CASE(CreateNormalizationFloatNhwcWorkload)
}
-template <typename Pooling2dWorkloadType, typename armnn::DataType DataType>
+template <typename armnn::DataType DataType>
static void NeonCreatePooling2dWorkloadTest(DataLayout dataLayout = DataLayout::NCHW)
{
Graph graph;
NeonWorkloadFactory factory;
- auto workload = CreatePooling2dWorkloadTest<Pooling2dWorkloadType, DataType>
+ auto workload = CreatePooling2dWorkloadTest<NeonPooling2dWorkload, DataType>
(factory, graph, dataLayout);
TensorShape inputShape = (dataLayout == DataLayout::NCHW) ? TensorShape{3, 2, 5, 5} : TensorShape{3, 5, 5, 2};
@@ -346,28 +346,28 @@ static void NeonCreatePooling2dWorkloadTest(DataLayout dataLayout = DataLayout::
#ifdef __ARM_FEATURE_FP16_VECTOR_ARITHMETIC
BOOST_AUTO_TEST_CASE(CreatePooling2dFloat16Workload)
{
- NeonCreatePooling2dWorkloadTest<NeonPooling2dFloatWorkload, DataType::Float16>();
+ NeonCreatePooling2dWorkloadTest<DataType::Float16>();
}
#endif
BOOST_AUTO_TEST_CASE(CreatePooling2dFloatNchwWorkload)
{
- NeonCreatePooling2dWorkloadTest<NeonPooling2dFloatWorkload, DataType::Float32>(DataLayout::NCHW);
+ NeonCreatePooling2dWorkloadTest<DataType::Float32>(DataLayout::NCHW);
}
BOOST_AUTO_TEST_CASE(CreatePooling2dFloatNhwcWorkload)
{
- NeonCreatePooling2dWorkloadTest<NeonPooling2dFloatWorkload, DataType::Float32>(DataLayout::NHWC);
+ NeonCreatePooling2dWorkloadTest<DataType::Float32>(DataLayout::NHWC);
}
BOOST_AUTO_TEST_CASE(CreatePooling2dUint8NchwWorkload)
{
- NeonCreatePooling2dWorkloadTest<NeonPooling2dUint8Workload, DataType::QuantisedAsymm8>(DataLayout::NCHW);
+ NeonCreatePooling2dWorkloadTest<DataType::QuantisedAsymm8>(DataLayout::NCHW);
}
BOOST_AUTO_TEST_CASE(CreatePooling2dUint8NhwcWorkload)
{
- NeonCreatePooling2dWorkloadTest<NeonPooling2dUint8Workload, DataType::QuantisedAsymm8>(DataLayout::NHWC);
+ NeonCreatePooling2dWorkloadTest<DataType::QuantisedAsymm8>(DataLayout::NHWC);
}
template <typename armnn::DataType DataType>
diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt
index 7f912610ef..a96c27c75a 100644
--- a/src/backends/neon/workloads/CMakeLists.txt
+++ b/src/backends/neon/workloads/CMakeLists.txt
@@ -46,12 +46,8 @@ list(APPEND armnnNeonBackendWorkloads_sources
NeonNormalizationFloatWorkload.hpp
NeonPermuteWorkload.cpp
NeonPermuteWorkload.hpp
- NeonPooling2dBaseWorkload.cpp
- NeonPooling2dBaseWorkload.hpp
- NeonPooling2dFloatWorkload.cpp
- NeonPooling2dFloatWorkload.hpp
- NeonPooling2dUint8Workload.cpp
- NeonPooling2dUint8Workload.hpp
+ NeonPooling2dWorkload.cpp
+ NeonPooling2dWorkload.hpp
NeonReshapeWorkload.cpp
NeonReshapeWorkload.hpp
NeonSoftmaxBaseWorkload.cpp
diff --git a/src/backends/neon/workloads/NeonPooling2dBaseWorkload.hpp b/src/backends/neon/workloads/NeonPooling2dBaseWorkload.hpp
deleted file mode 100644
index 8ea41fe18a..0000000000
--- a/src/backends/neon/workloads/NeonPooling2dBaseWorkload.hpp
+++ /dev/null
@@ -1,37 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backends/neon/workloads/NeonWorkloadUtils.hpp>
-
-namespace armnn
-{
-
-arm_compute::Status NeonPooling2dWorkloadValidate(const TensorInfo& input,
- const TensorInfo& output,
- const Pooling2dDescriptor& descriptor);
-
-// Base class template providing an implementation of the Pooling2d layer common to all data types.
-template <armnn::DataType... dataTypes>
-class NeonPooling2dBaseWorkload : public TypedWorkload<Pooling2dQueueDescriptor, dataTypes...>
-{
-public:
- using TypedWorkload<Pooling2dQueueDescriptor, dataTypes...>::m_Data;
-
- NeonPooling2dBaseWorkload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info,
- const std::string& name);
-
-protected:
- mutable arm_compute::NEPoolingLayer m_PoolingLayer;
-};
-
-
-} //namespace armnn
-
-
-
-
-
diff --git a/src/backends/neon/workloads/NeonPooling2dFloatWorkload.cpp b/src/backends/neon/workloads/NeonPooling2dFloatWorkload.cpp
deleted file mode 100644
index 46996b088c..0000000000
--- a/src/backends/neon/workloads/NeonPooling2dFloatWorkload.cpp
+++ /dev/null
@@ -1,27 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "NeonPooling2dFloatWorkload.hpp"
-
-
-
-namespace armnn
-{
-
-NeonPooling2dFloatWorkload::NeonPooling2dFloatWorkload(const Pooling2dQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : NeonPooling2dBaseWorkload<armnn::DataType::Float16, armnn::DataType::Float32>(descriptor, info,
- "NeonPooling2dFloatWorkload")
-{
-}
-
-void NeonPooling2dFloatWorkload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonPooling2dFloatWorkload_Execute");
- m_PoolingLayer.run();
-}
-
-} //namespace armnn
-
diff --git a/src/backends/neon/workloads/NeonPooling2dFloatWorkload.hpp b/src/backends/neon/workloads/NeonPooling2dFloatWorkload.hpp
deleted file mode 100644
index 9b0eebdc2b..0000000000
--- a/src/backends/neon/workloads/NeonPooling2dFloatWorkload.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <backends/neon/workloads/NeonWorkloadUtils.hpp>
-#include "NeonPooling2dBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class NeonPooling2dFloatWorkload : public NeonPooling2dBaseWorkload<armnn::DataType::Float16,
- armnn::DataType::Float32>
-{
-public:
- NeonPooling2dFloatWorkload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-};
-
-} //namespace armnn
-
-
-
diff --git a/src/backends/neon/workloads/NeonPooling2dUint8Workload.cpp b/src/backends/neon/workloads/NeonPooling2dUint8Workload.cpp
deleted file mode 100644
index 8f99a2be86..0000000000
--- a/src/backends/neon/workloads/NeonPooling2dUint8Workload.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#include "NeonPooling2dUint8Workload.hpp"
-
-
-
-namespace armnn
-{
-
-NeonPooling2dUint8Workload::NeonPooling2dUint8Workload(const Pooling2dQueueDescriptor& descriptor,
- const WorkloadInfo& info)
- : NeonPooling2dBaseWorkload<armnn::DataType::QuantisedAsymm8>(descriptor, info, "NeonPooling2dUint8Workload")
-{
-}
-
-void NeonPooling2dUint8Workload::Execute() const
-{
- ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonPooling2dUint8Workload_Execute");
- m_PoolingLayer.run();
-}
-
-} //namespace armnn
-
diff --git a/src/backends/neon/workloads/NeonPooling2dUint8Workload.hpp b/src/backends/neon/workloads/NeonPooling2dUint8Workload.hpp
deleted file mode 100644
index d475c5f721..0000000000
--- a/src/backends/neon/workloads/NeonPooling2dUint8Workload.hpp
+++ /dev/null
@@ -1,25 +0,0 @@
-//
-// Copyright © 2017 Arm Ltd. All rights reserved.
-// SPDX-License-Identifier: MIT
-//
-
-#pragma once
-
-#include <armnn/Types.hpp>
-#include "NeonPooling2dBaseWorkload.hpp"
-
-namespace armnn
-{
-
-class NeonPooling2dUint8Workload : public NeonPooling2dBaseWorkload<armnn::DataType::QuantisedAsymm8>
-{
-public:
- NeonPooling2dUint8Workload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info);
- virtual void Execute() const override;
-};
-
-} //namespace armnn
-
-
-
-
diff --git a/src/backends/neon/workloads/NeonPooling2dBaseWorkload.cpp b/src/backends/neon/workloads/NeonPooling2dWorkload.cpp
index 054f9c5f75..7892b3a315 100644
--- a/src/backends/neon/workloads/NeonPooling2dBaseWorkload.cpp
+++ b/src/backends/neon/workloads/NeonPooling2dWorkload.cpp
@@ -3,7 +3,7 @@
// SPDX-License-Identifier: MIT
//
-#include "NeonPooling2dBaseWorkload.hpp"
+#include "NeonPooling2dWorkload.hpp"
#include <backends/neon/NeonLayerSupport.hpp>
#include <backends/neon/NeonTensorHandle.hpp>
#include <backends/aclCommon/ArmComputeUtils.hpp>
@@ -25,12 +25,11 @@ arm_compute::Status NeonPooling2dWorkloadValidate(const TensorInfo& input,
return arm_compute::NEPoolingLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);
}
-template <armnn::DataType... dataTypes>
-NeonPooling2dBaseWorkload<dataTypes...>::NeonPooling2dBaseWorkload(
- const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info, const std::string& name)
- : TypedWorkload<Pooling2dQueueDescriptor, dataTypes...>(descriptor, info)
+NeonPooling2dWorkload::NeonPooling2dWorkload(
+ const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info)
+ : BaseWorkload<Pooling2dQueueDescriptor>(descriptor, info)
{
- m_Data.ValidateInputsOutputs(name, 1, 1);
+ m_Data.ValidateInputsOutputs("NeonPooling2dWorkload", 1, 1);
arm_compute::ITensor& input = boost::polymorphic_downcast<INeonTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
arm_compute::ITensor& output = boost::polymorphic_downcast<INeonTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
@@ -44,8 +43,10 @@ NeonPooling2dBaseWorkload<dataTypes...>::NeonPooling2dBaseWorkload(
m_PoolingLayer.configure(&input, &output, layerInfo);
}
-template class NeonPooling2dBaseWorkload<DataType::Float16, DataType::Float32>;
-template class NeonPooling2dBaseWorkload<DataType::QuantisedAsymm8>;
+void NeonPooling2dWorkload::Execute() const
+{
+ ARMNN_SCOPED_PROFILING_EVENT_NEON("NeonPooling2dWorkload_Execute");
+ m_PoolingLayer.run();
+}
} //namespace armnn
-
diff --git a/src/backends/neon/workloads/NeonPooling2dWorkload.hpp b/src/backends/neon/workloads/NeonPooling2dWorkload.hpp
new file mode 100644
index 0000000000..848221cc6e
--- /dev/null
+++ b/src/backends/neon/workloads/NeonPooling2dWorkload.hpp
@@ -0,0 +1,30 @@
+//
+// Copyright © 2017 Arm Ltd. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include <backends/neon/workloads/NeonWorkloadUtils.hpp>
+
+namespace armnn
+{
+
+arm_compute::Status NeonPooling2dWorkloadValidate(const TensorInfo& input,
+ const TensorInfo& output,
+ const Pooling2dDescriptor& descriptor);
+
+class NeonPooling2dWorkload : public BaseWorkload<Pooling2dQueueDescriptor>
+{
+public:
+ using BaseWorkload<Pooling2dQueueDescriptor>::m_Data;
+
+ NeonPooling2dWorkload(const Pooling2dQueueDescriptor& descriptor, const WorkloadInfo& info);
+
+ void Execute() const override;
+
+private:
+ mutable arm_compute::NEPoolingLayer m_PoolingLayer;
+};
+
+} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonWorkloads.hpp b/src/backends/neon/workloads/NeonWorkloads.hpp
index 917b1feac3..93711b6fc1 100644
--- a/src/backends/neon/workloads/NeonWorkloads.hpp
+++ b/src/backends/neon/workloads/NeonWorkloads.hpp
@@ -25,9 +25,7 @@
#include "NeonMultiplicationFloatWorkload.hpp"
#include "NeonNormalizationFloatWorkload.hpp"
#include "NeonPermuteWorkload.hpp"
-#include "NeonPooling2dBaseWorkload.hpp"
-#include "NeonPooling2dFloatWorkload.hpp"
-#include "NeonPooling2dUint8Workload.hpp"
+#include "NeonPooling2dWorkload.hpp"
#include "NeonReshapeWorkload.hpp"
#include "NeonSoftmaxFloatWorkload.hpp"
#include "NeonSoftmaxUint8Workload.hpp"