aboutsummaryrefslogtreecommitdiff
path: root/delegate
diff options
context:
space:
mode:
authorTeresa Charlin <teresa.charlinreyes@arm.com>2021-08-05 12:34:37 +0100
committerTeresaARM <teresa.charlinreyes@arm.com>2021-09-03 08:41:21 +0000
commit4e3e831da1d6d85dffffacf57e9de8fc891b7e58 (patch)
tree9a3653729feba788dcfbbdc5255ad379cbbf597d /delegate
parent14bef9f83f7cd58e5038ae7432d75da2d50e7b68 (diff)
downloadarmnn-4e3e831da1d6d85dffffacf57e9de8fc891b7e58.tar.gz
IVGCVSW-6262 Add support for Reduce Prod
* Tflite parser * Tflite delegate * Serializer * Deserializer * Ref, CpuAcc and GpuAcc workloads Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com> Change-Id: I601a9ee1680b372c7955d9a628857d08c3cfd377
Diffstat (limited to 'delegate')
-rw-r--r--delegate/src/Reduce.hpp4
-rw-r--r--delegate/src/armnn_delegate.cpp6
-rw-r--r--delegate/src/test/ReduceTest.cpp69
3 files changed, 79 insertions, 0 deletions
diff --git a/delegate/src/Reduce.hpp b/delegate/src/Reduce.hpp
index 13a11d3e61..bcea16fdb0 100644
--- a/delegate/src/Reduce.hpp
+++ b/delegate/src/Reduce.hpp
@@ -91,6 +91,10 @@ TfLiteStatus VisitReduceOperator(DelegateData& delegateData,
{
desc.m_ReduceOperation = armnn::ReduceOperation::Sum;
}
+ else if (reduceOperatorCode == kTfLiteBuiltinReduceProd)
+ {
+ desc.m_ReduceOperation = armnn::ReduceOperation::Prod;
+ }
else
{
TF_LITE_MAYBE_KERNEL_LOG(
diff --git a/delegate/src/armnn_delegate.cpp b/delegate/src/armnn_delegate.cpp
index d3ccecb444..f13bb5779c 100644
--- a/delegate/src/armnn_delegate.cpp
+++ b/delegate/src/armnn_delegate.cpp
@@ -765,6 +765,12 @@ TfLiteStatus ArmnnSubgraph::VisitNode(DelegateData& delegateData,
tfLiteNode,
nodeIndex,
kTfLiteBuiltinReduceMin);
+ case kTfLiteBuiltinReduceProd:
+ return VisitReduceOperator(delegateData,
+ tfLiteContext,
+ tfLiteNode,
+ nodeIndex,
+ kTfLiteBuiltinReduceProd);
case kTfLiteBuiltinRelu:
return VisitActivationOperator(delegateData,
tfLiteContext,
diff --git a/delegate/src/test/ReduceTest.cpp b/delegate/src/test/ReduceTest.cpp
index 49608b6a2c..5dd33562e6 100644
--- a/delegate/src/test/ReduceTest.cpp
+++ b/delegate/src/test/ReduceTest.cpp
@@ -350,5 +350,74 @@ TEST_CASE ("Sum_Fp32_GpuAcc_Test")
} // End of Sum_GpuAccTests
+// PROD Tests
+TEST_SUITE("Prod_CpuRefTests")
+{
+
+TEST_CASE ("Prod_Uint8_KeepDims_CpuRef_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef};
+ std::vector<uint8_t> expectedOutputValues { 4, 6, 3 };
+ ReduceUint8KeepDimsTest(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+TEST_CASE ("Prod_Fp32_CpuRef_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::CpuRef};
+ std::vector<float> expectedOutputValues { 10010.0f, 11022.0f, 12036.0f };
+ ReduceFp32Test(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+} // End of Prod_CpuRefTests
+
+TEST_SUITE("Prod_CpuAccTests")
+{
+
+TEST_CASE ("Prod_Uint8_KeepDims_CpuAcc_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc};
+ std::vector<uint8_t> expectedOutputValues { 4, 6, 3 };
+ ReduceUint8KeepDimsTest(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+TEST_CASE ("Prod_Fp32_CpuAcc_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::CpuAcc};
+ std::vector<float> expectedOutputValues { 10010.0f, 11022.0f, 12036.0f };
+ ReduceFp32Test(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+} // End of Prod_CpuAccTests
+
+TEST_SUITE("Prod_GpuAccTests")
+{
+
+TEST_CASE ("Prod_Uint8_KeepDims_GpuAcc_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc};
+ std::vector<uint8_t> expectedOutputValues { 4, 6, 3 };
+ ReduceUint8KeepDimsTest(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+TEST_CASE ("Prod_Fp32_GpuAcc_Test")
+{
+ std::vector<armnn::BackendId> backends = {armnn::Compute::GpuAcc};
+ std::vector<float> expectedOutputValues { 10010.0f, 11022.0f, 12036.0f };
+ ReduceFp32Test(tflite::BuiltinOperator_REDUCE_PROD,
+ backends,
+ expectedOutputValues);
+}
+
+} // End of Prod_GpuAccTests
} // namespace armnnDelegate \ No newline at end of file