aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRyan OShea <ryan.oshea3@arm.com>2022-05-04 00:38:03 +0100
committerryan.oshea3 <ryan.oshea3@arm.com>2022-05-13 16:46:20 +0000
commit19e79420fa9f136352cce56b5650b47aa2e96de3 (patch)
treee6f0eb1907377ff78b6a905d028f394d7faa880e
parent4452baf3d295164877c5810a3867b1d2d79b04f3 (diff)
downloadarmnn-19e79420fa9f136352cce56b5650b47aa2e96de3.tar.gz
IVGCVSW-6175 Add Pooling3d to Neon
* Add IsSupported for Pooling3d * Add CreateWorkload case for Pooling3d * Create new NeonPooling3dWorkload header and source files * Add Pooling3d workload to NeonWorkloads.hpp * Add float32 tests for Pooling3d workload * Add Uint8 tests for Cl and NE pooling3d Signed-off-by: Ryan OShea <ryan.oshea3@arm.com> Change-Id: Ic992e1233d1eb8db52df2c8446183df1c907bc4d
-rw-r--r--src/backends/cl/test/ClLayerTests.cpp61
-rw-r--r--src/backends/neon/NeonLayerSupport.cpp16
-rw-r--r--src/backends/neon/NeonLayerSupport.hpp5
-rw-r--r--src/backends/neon/NeonWorkloadFactory.cpp5
-rw-r--r--src/backends/neon/backend.mk1
-rw-r--r--src/backends/neon/test/NeonLayerTests.cpp114
-rw-r--r--src/backends/neon/workloads/CMakeLists.txt2
-rw-r--r--src/backends/neon/workloads/NeonPooling3dWorkload.cpp64
-rw-r--r--src/backends/neon/workloads/NeonPooling3dWorkload.hpp33
-rw-r--r--src/backends/neon/workloads/NeonWorkloads.hpp1
10 files changed, 295 insertions, 7 deletions
diff --git a/src/backends/cl/test/ClLayerTests.cpp b/src/backends/cl/test/ClLayerTests.cpp
index 68635ac6fc..855697c9be 100644
--- a/src/backends/cl/test/ClLayerTests.cpp
+++ b/src/backends/cl/test/ClLayerTests.cpp
@@ -517,6 +517,7 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(IgnorePaddingSimpleL2Pooling2d,
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_IgnorePaddingSimpleL2Pooling2dUint8,
ClContextControlFixture,
IgnorePaddingSimpleL2Pooling2dUint8Test)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(IgnorePaddingL2Pooling2dSize3,
ClContextControlFixture,
IgnorePaddingL2Pooling2dSize3Test)
@@ -617,26 +618,51 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleMaxPooling3dSize2x2x2Stride1x1x1,
SimpleMaxPooling3dSize2x2x2Stride1x1x1Test,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleMaxPooling3dSize2x2x2Stride1x1x1Uint8,
+ ClContextControlFixture,
+ SimpleMaxPooling3dSize2x2x2Stride1x1x1Uint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleMaxPooling3d,
ClContextControlFixture,
SimpleMaxPooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleMaxPooling3dUint8,
+ ClContextControlFixture,
+ SimpleMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(IgnorePaddingSimpleMaxPooling3d,
ClContextControlFixture,
IgnorePaddingSimpleMaxPooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(IgnorePaddingSimpleMaxPooling3dUint8,
+ ClContextControlFixture,
+ IgnorePaddingSimpleMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleAveragePooling3d,
ClContextControlFixture,
SimpleAveragePooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleAveragePooling3dUint8,
+ ClContextControlFixture,
+ SimpleAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(LargeTensorsAveragePooling3d,
ClContextControlFixture,
LargeTensorsAveragePooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(LargeTensorsAveragePooling3dUint8,
+ ClContextControlFixture,
+ LargeTensorsAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(IgnorePaddingSimpleAveragePooling3d,
ClContextControlFixture,
IgnorePaddingSimpleAveragePooling3dTest,
@@ -657,11 +683,21 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(AsymmetricNonSquareMaxPooling3d,
AsymmetricNonSquareMaxPooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(AsymmetricNonSquareMaxPooling3dUint8,
+ ClContextControlFixture,
+ AsymmetricNonSquareMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(AsymmetricNonSquareAveragePooling3d,
ClContextControlFixture,
AsymmetricNonSquareAveragePooling3dTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(AsymmetricNonSquareAveragePooling3dUint8,
+ ClContextControlFixture,
+ AsymmetricNonSquareAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(AsymmetricNonSquareL2Pooling3d,
ClContextControlFixture,
AsymmetricNonSquareL2Pooling3dTest,
@@ -672,9 +708,19 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareMaxPooling3dWith
AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolTest,
DataLayout::NDHWC)
-ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPool,
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolUint8,
ClContextControlFixture,
- AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolTest,
+ AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8,
+ ClContextControlFixture,
+ AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8,
+ ClContextControlFixture,
+ AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8Test,
DataLayout::NDHWC)
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTEDAsymmetricNonSquareL2Pooling3dWithPaddingOnlyPool,
@@ -682,13 +728,20 @@ ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTEDAsymmetricNonSquareL2Pooling3dWithPa
AsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolTest,
DataLayout::NDHWC)
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(UNSUPPORTEDAsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolUint8,
+ ClContextControlFixture,
+ AsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleAveragePooling3d,
ClContextControlFixture,
SimpleAveragePooling3dTest,
DataLayout::NDHWC)
-
-
+ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleAveragePooling3dUint8,
+ ClContextControlFixture,
+ SimpleAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
// Add
ARMNN_AUTO_TEST_FIXTURE_WITH_THF(SimpleAdd, ClContextControlFixture, AdditionTest)
diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp
index d50b25377d..cf541f491b 100644
--- a/src/backends/neon/NeonLayerSupport.cpp
+++ b/src/backends/neon/NeonLayerSupport.cpp
@@ -58,6 +58,7 @@
#include "workloads/NeonPadWorkload.hpp"
#include "workloads/NeonPermuteWorkload.hpp"
#include "workloads/NeonPooling2dWorkload.hpp"
+#include "workloads/NeonPooling3dWorkload.hpp"
#include "workloads/NeonPreluWorkload.hpp"
#include "workloads/NeonQLstmWorkload.hpp"
#include "workloads/NeonQuantizeWorkload.hpp"
@@ -435,6 +436,11 @@ bool NeonLayerSupport::IsLayerSupported(const LayerType& type,
infos[1],
*(PolymorphicDowncast<const Pooling2dDescriptor*>(&descriptor)),
reasonIfUnsupported);
+ case LayerType::Pooling3d:
+ return IsPooling3dSupported(infos[0],
+ infos[1],
+ *(PolymorphicDowncast<const Pooling3dDescriptor*>(&descriptor)),
+ reasonIfUnsupported);
case LayerType::Prelu:
return IsPreluSupported(infos[0], infos[1], infos[2], reasonIfUnsupported);
case LayerType::QLstm:
@@ -578,7 +584,7 @@ bool NeonLayerSupport::IsLayerSupported(const LayerType& type,
default:
// layers not supported in neon by default:
// debug, fakequantization, precompiled,
- // standin, switch, pooling3d
+ // standin, switch
return false;
}
}
@@ -1213,6 +1219,14 @@ bool NeonLayerSupport::IsPooling2dSupported(const TensorInfo& input,
FORWARD_WORKLOAD_VALIDATE_FUNC(NeonPooling2dWorkloadValidate, reasonIfUnsupported, input, output, descriptor);
}
+bool NeonLayerSupport::IsPooling3dSupported(const TensorInfo& input,
+ const TensorInfo& output,
+ const Pooling3dDescriptor& descriptor,
+ Optional<std::string&> reasonIfUnsupported) const
+{
+ FORWARD_WORKLOAD_VALIDATE_FUNC(NeonPooling3dWorkloadValidate, reasonIfUnsupported, input, output, descriptor);
+}
+
bool NeonLayerSupport::IsPreluSupported(const armnn::TensorInfo &input,
const armnn::TensorInfo &alpha,
const armnn::TensorInfo &output,
diff --git a/src/backends/neon/NeonLayerSupport.hpp b/src/backends/neon/NeonLayerSupport.hpp
index b82351872b..783e6a0c46 100644
--- a/src/backends/neon/NeonLayerSupport.hpp
+++ b/src/backends/neon/NeonLayerSupport.hpp
@@ -246,7 +246,10 @@ public:
const TensorInfo& output,
const Pooling2dDescriptor& descriptor,
Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
-
+ bool IsPooling3dSupported(const TensorInfo& input,
+ const TensorInfo& output,
+ const Pooling3dDescriptor& descriptor,
+ Optional<std::string&> reasonIfUnsupported = EmptyOptional()) const override;
bool IsPreluSupported(const TensorInfo& input,
const TensorInfo& alpha,
const TensorInfo& output,
diff --git a/src/backends/neon/NeonWorkloadFactory.cpp b/src/backends/neon/NeonWorkloadFactory.cpp
index f087c6262a..ff9ef268ec 100644
--- a/src/backends/neon/NeonWorkloadFactory.cpp
+++ b/src/backends/neon/NeonWorkloadFactory.cpp
@@ -461,6 +461,11 @@ std::unique_ptr<IWorkload> NeonWorkloadFactory::CreateWorkload(LayerType type,
auto pooling2dQueueDescriptor = PolymorphicDowncast<const Pooling2dQueueDescriptor*>(&descriptor);
return std::make_unique<NeonPooling2dWorkload>(*pooling2dQueueDescriptor, info);
}
+ case LayerType::Pooling3d :
+ {
+ auto pooling3dQueueDescriptor = PolymorphicDowncast<const Pooling3dQueueDescriptor*>(&descriptor);
+ return std::make_unique<NeonPooling3dWorkload>(*pooling3dQueueDescriptor, info);
+ }
case LayerType::PreCompiled :
{
auto preCompiledQueueDescriptor = PolymorphicDowncast<const PreCompiledQueueDescriptor*>(&descriptor);
diff --git a/src/backends/neon/backend.mk b/src/backends/neon/backend.mk
index d940c92ba1..7c0974c13f 100644
--- a/src/backends/neon/backend.mk
+++ b/src/backends/neon/backend.mk
@@ -67,6 +67,7 @@ BACKEND_SOURCES := \
workloads/NeonPadWorkload.cpp \
workloads/NeonPermuteWorkload.cpp \
workloads/NeonPooling2dWorkload.cpp \
+ workloads/NeonPooling3dWorkload.cpp \
workloads/NeonPreluWorkload.cpp \
workloads/NeonQLstmWorkload.cpp \
workloads/NeonQuantizedLstmWorkload.cpp \
diff --git a/src/backends/neon/test/NeonLayerTests.cpp b/src/backends/neon/test/NeonLayerTests.cpp
index b813c33763..91fb4d77a8 100644
--- a/src/backends/neon/test/NeonLayerTests.cpp
+++ b/src/backends/neon/test/NeonLayerTests.cpp
@@ -458,7 +458,7 @@ ARMNN_AUTO_TEST_CASE(DequantizeSimpleUint8, DequantizeSimpleUint8Test)
ARMNN_AUTO_TEST_CASE(DequantizeOffsetUint8, DequantizeOffsetUint8Test)
ARMNN_AUTO_TEST_CASE(DequantizeSimpleInt16, DequantizeSimpleInt16Test)
-// Pooling
+// Pooling2d
ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling2dSize3x3Stride2x4,
SimpleMaxPooling2dSize3x3Stride2x4Test, true)
ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling2dSize3x3Stride2x4Uint8,
@@ -522,6 +522,111 @@ ARMNN_AUTO_TEST_CASE_WITH_THF(IgnorePaddingL2Pooling2dSize3, IgnorePaddingL2Pool
ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_IgnorePaddingL2Pooling2dSize3Uint8,
IgnorePaddingL2Pooling2dSize3Uint8Test)
+//Pooling 3d
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling3dSize2x2x2Stride1x1x1,
+ SimpleMaxPooling3dSize2x2x2Stride1x1x1Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling3dSize2x2x2Stride1x1x1Uint8,
+ SimpleMaxPooling3dSize2x2x2Stride1x1x1Uint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling3d,
+ SimpleMaxPooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleMaxPooling3dUint8,
+ SimpleMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(IgnorePaddingSimpleMaxPooling3d,
+ IgnorePaddingSimpleMaxPooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(IgnorePaddingSimpleMaxPooling3dUint8,
+ IgnorePaddingSimpleMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleAveragePooling3d,
+ SimpleAveragePooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleAveragePooling3dUint8,
+ SimpleAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(LargeTensorsAveragePooling3d,
+ LargeTensorsAveragePooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(LargeTensorsAveragePooling3dUint8,
+ LargeTensorsAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(IgnorePaddingSimpleAveragePooling3d,
+ IgnorePaddingSimpleAveragePooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleL2Pooling3d,
+ SimpleL2Pooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(IgnorePaddingSimpleL2Pooling3d,
+ IgnorePaddingSimpleL2Pooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(AsymmetricNonSquareMaxPooling3d,
+ AsymmetricNonSquareMaxPooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(AsymmetricNonSquareMaxPooling3dUint8,
+ AsymmetricNonSquareMaxPooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(AsymmetricNonSquareAveragePooling3d,
+ AsymmetricNonSquareAveragePooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(AsymmetricNonSquareAveragePooling3dUint8,
+ AsymmetricNonSquareAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(AsymmetricNonSquareL2Pooling3d,
+ AsymmetricNonSquareL2Pooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPool,
+ AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolUint8,
+ AsymmetricNonSquareMaxPooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPool,
+ AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8,
+ AsymmetricNonSquareAveragePooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTEDAsymmetricNonSquareL2Pooling3dWithPaddingOnlyPool,
+ AsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(UNSUPPORTEDAsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolUint8,
+ AsymmetricNonSquareL2Pooling3dWithPaddingOnlyPoolUint8Test,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleAveragePooling3d,
+ SimpleAveragePooling3dTest,
+ DataLayout::NDHWC)
+
+ARMNN_AUTO_TEST_CASE_WITH_THF(SimpleAveragePooling3dUint8,
+ SimpleAveragePooling3dUint8Test,
+ DataLayout::NDHWC)
+
// Activation
ARMNN_AUTO_TEST_CASE_WITH_THF(ConstantLinearActivation, ConstantLinearActivationTest)
@@ -1572,6 +1677,13 @@ ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareL2Pooling2dWithReference, Compa
ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(UNSUPPORTED_CompareL2Pooling2dWithReferenceUint8, ComparePooling2dUint8Test,
PoolingAlgorithm::L2)
+ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareMaxPooling3dWithRef, ComparePooling3dTest, PoolingAlgorithm::Max,
+ DataLayout::NDHWC)
+ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareAveragePooling3dWithRef, ComparePooling3dTest,
+ PoolingAlgorithm::Average, DataLayout::NDHWC)
+ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareL2Pooling3dWithRef, ComparePooling3dTest, PoolingAlgorithm::L2,
+ DataLayout::NDHWC)
+
// Moved to NeonLayerTests_NDK_Bug.cpp
//ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareSoftmaxBeta1WithReference, CompareSoftmaxTest, 1.0f)
//ARMNN_COMPARE_REF_AUTO_TEST_CASE_WITH_THF(CompareSoftmaxBeta2WithReference, CompareSoftmaxTest, 2.0f)
diff --git a/src/backends/neon/workloads/CMakeLists.txt b/src/backends/neon/workloads/CMakeLists.txt
index 16fae69029..2209bf47e2 100644
--- a/src/backends/neon/workloads/CMakeLists.txt
+++ b/src/backends/neon/workloads/CMakeLists.txt
@@ -94,6 +94,8 @@ list(APPEND armnnNeonBackendWorkloads_sources
NeonPermuteWorkload.hpp
NeonPooling2dWorkload.cpp
NeonPooling2dWorkload.hpp
+ NeonPooling3dWorkload.hpp
+ NeonPooling3dWorkload.cpp
NeonPreluWorkload.cpp
NeonPreluWorkload.hpp
NeonQLstmWorkload.cpp
diff --git a/src/backends/neon/workloads/NeonPooling3dWorkload.cpp b/src/backends/neon/workloads/NeonPooling3dWorkload.cpp
new file mode 100644
index 0000000000..4bc4f986c3
--- /dev/null
+++ b/src/backends/neon/workloads/NeonPooling3dWorkload.cpp
@@ -0,0 +1,64 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+#include "NeonPooling3dWorkload.hpp"
+#include "NeonWorkloadUtils.hpp"
+#include <neon/NeonLayerSupport.hpp>
+#include <neon/NeonTensorHandle.hpp>
+#include <aclCommon/ArmComputeUtils.hpp>
+#include <aclCommon/ArmComputeTensorUtils.hpp>
+
+namespace armnn
+{
+ using namespace armcomputetensorutils;
+ arm_compute::Status NeonPooling3dWorkloadValidate(const TensorInfo& input,
+ const TensorInfo& output,
+ const Pooling3dDescriptor& descriptor)
+ {
+ const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input, descriptor.m_DataLayout);
+ const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output, descriptor.m_DataLayout);
+ arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(descriptor);
+ return arm_compute::NEPooling3dLayer::validate(&aclInputInfo, &aclOutputInfo, layerInfo);
+ }
+
+ NeonPooling3dWorkload::NeonPooling3dWorkload( const Pooling3dQueueDescriptor& descriptor,
+ const WorkloadInfo& info)
+ : NeonBaseWorkload<Pooling3dQueueDescriptor>(descriptor, info)
+ {
+ // Report Profiling Details
+ ARMNN_REPORT_PROFILING_WORKLOAD_DESC("NeonPooling3dWorkload_Construct",
+ descriptor.m_Parameters,
+ info,
+ this->GetGuid());
+
+ m_Data.ValidateInputsOutputs("NeonPooling3dWorkload", 1, 1);
+
+ arm_compute::ITensor& input = static_cast<IAclTensorHandle*>(m_Data.m_Inputs[0])->GetTensor();
+ arm_compute::ITensor& output = static_cast<IAclTensorHandle*>(m_Data.m_Outputs[0])->GetTensor();
+
+ arm_compute::DataLayout aclDataLayout = ConvertDataLayout(m_Data.m_Parameters.m_DataLayout);
+ input.info()->set_data_layout(aclDataLayout);
+ output.info()->set_data_layout(aclDataLayout);
+
+ // flag to use wider accumulators (32 bit instead of 16 for FP16) to improve accuracy
+ // enable fp_mixed_precision for the the FP16 cases that
+ // accumulation reaches a limit beyond which there is no more increment of the value
+ bool fpMixedPrecision = false;
+
+ arm_compute::Pooling3dLayerInfo layerInfo = BuildArmComputePooling3dLayerInfo(m_Data.m_Parameters,
+ fpMixedPrecision);
+ {
+ ARMNN_SCOPED_PROFILING_EVENT(Compute::Undefined, "NeonPooling3dWorkload_configure");
+
+ auto layer = std::make_unique<arm_compute::NEPooling3dLayer>();
+ layer->configure(&input, &output, layerInfo);
+ m_PoolingLayer.reset(layer.release());
+ }
+ }
+ void NeonPooling3dWorkload::Execute() const
+ {
+ ARMNN_SCOPED_PROFILING_EVENT_NEON_GUID("NeonPooling3dWorkload_Execute", this->GetGuid());
+ m_PoolingLayer->run();
+ }
+}
diff --git a/src/backends/neon/workloads/NeonPooling3dWorkload.hpp b/src/backends/neon/workloads/NeonPooling3dWorkload.hpp
new file mode 100644
index 0000000000..03453f1eee
--- /dev/null
+++ b/src/backends/neon/workloads/NeonPooling3dWorkload.hpp
@@ -0,0 +1,33 @@
+//
+// Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
+// SPDX-License-Identifier: MIT
+//
+
+#pragma once
+
+#include "NeonBaseWorkload.hpp"
+
+#include <arm_compute/runtime/NEON/functions/NEPooling3dLayer.h>
+
+namespace armnn
+{
+
+ arm_compute::Status NeonPooling3dWorkloadValidate(const TensorInfo& input,
+ const TensorInfo& output,
+ const Pooling3dDescriptor& descriptor);
+
+ class NeonPooling3dWorkload : public NeonBaseWorkload<Pooling3dQueueDescriptor>
+ {
+ public:
+ using BaseWorkload<Pooling3dQueueDescriptor>::m_Data;
+
+ NeonPooling3dWorkload(const Pooling3dQueueDescriptor& descriptor,
+ const WorkloadInfo& info);
+
+ void Execute() const override;
+
+ private:
+ std::unique_ptr<arm_compute::IFunction> m_PoolingLayer;
+ };
+
+} //namespace armnn
diff --git a/src/backends/neon/workloads/NeonWorkloads.hpp b/src/backends/neon/workloads/NeonWorkloads.hpp
index d486a1d988..8f83674950 100644
--- a/src/backends/neon/workloads/NeonWorkloads.hpp
+++ b/src/backends/neon/workloads/NeonWorkloads.hpp
@@ -49,6 +49,7 @@
#include "NeonPadWorkload.hpp"
#include "NeonPermuteWorkload.hpp"
#include "NeonPooling2dWorkload.hpp"
+#include "NeonPooling3dWorkload.hpp"
#include "NeonPreluWorkload.hpp"
#include "NeonQLstmWorkload.hpp"
#include "NeonQuantizedLstmWorkload.hpp"