aboutsummaryrefslogtreecommitdiff
path: root/src/backends/tosaReference
diff options
context:
space:
mode:
authorKevin May <kevin.may@arm.com>2022-12-15 10:15:21 +0000
committerTeresa Charlin <teresa.charlinreyes@arm.com>2022-12-15 17:16:12 +0000
commit5b58e31109f661f70331048e22f8a66934e74d15 (patch)
tree7ad8f88bf7427a1dd2622b53fcd0b4b8632ee34e /src/backends/tosaReference
parent3fbad94012ee6b1c6ec8e93d760619b15d98c464 (diff)
downloadarmnn-5b58e31109f661f70331048e22f8a66934e74d15.tar.gz
IVGCVSW-7170 Add Concat support to TOSA Reference Backend
* Change comment for the unique tensor names in all tosa common operators Signed-off-by: Kevin May <kevin.may@arm.com> Change-Id: I247b4b2365d5f0173218c5dfd11fba12d2399959
Diffstat (limited to 'src/backends/tosaReference')
-rw-r--r--src/backends/tosaReference/TosaRefLayerSupport.cpp7
-rw-r--r--src/backends/tosaReference/test/TosaRefEndToEndTests.cpp42
-rw-r--r--src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp52
3 files changed, 101 insertions, 0 deletions
diff --git a/src/backends/tosaReference/TosaRefLayerSupport.cpp b/src/backends/tosaReference/TosaRefLayerSupport.cpp
index e5427ebc93..0d0d07a783 100644
--- a/src/backends/tosaReference/TosaRefLayerSupport.cpp
+++ b/src/backends/tosaReference/TosaRefLayerSupport.cpp
@@ -43,6 +43,13 @@ bool TosaRefLayerSupport::IsLayerSupported(const LayerType& type,
inputInfos.push_back(&infos[1]);
outputInfos.push_back(&infos[2]);
break;
+ case LayerType::Concat:
+ for (unsigned int i = 0; i < infos.size() - 1; ++i)
+ {
+ inputInfos.push_back(&infos[i]);
+ }
+ outputInfos.push_back(&infos.back());
+ break;
case LayerType::Constant:
outputInfos.push_back(&infos[0]);
break;
diff --git a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
index 49f2cb7319..a377293fbf 100644
--- a/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
+++ b/src/backends/tosaReference/test/TosaRefEndToEndTests.cpp
@@ -7,6 +7,7 @@
#include "backendsCommon/test/AdditionEndToEndTestImpl.hpp"
#include "backendsCommon/test/Convolution2dEndToEndTestImpl.hpp"
+#include "backendsCommon/test/ConcatEndToEndTestImpl.hpp"
#include "backendsCommon/test/Pooling2dEndToEndTestImpl.hpp"
#include "backendsCommon/test/ReshapeEndToEndTestImpl.hpp"
#include "backendsCommon/test/SliceEndToEndTestImpl.hpp"
@@ -34,6 +35,47 @@ TEST_CASE("TosaRefAdditionEndtoEndTestFloat16")
AdditionEndToEndFloat16<DataType::Float16>(tosaDefaultBackends);
}
+// Concat
+TEST_CASE("TosaRefConcatEndToEndDim0TestFloat32")
+{
+ ConcatDim0EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim0TestInt32")
+{
+ ConcatDim0EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim1TestFloat32")
+{
+ ConcatDim1EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim1TestInt32")
+{
+ ConcatDim1EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim2TestFloat32")
+{
+ ConcatDim2EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim2TestInt32")
+{
+ ConcatDim2EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim3TestFloat32")
+{
+ ConcatDim3EndToEnd<armnn::DataType::Float32>(tosaDefaultBackends);
+}
+
+TEST_CASE("TosaRefConcatEndToEndDim3TestInt32")
+{
+ ConcatDim3EndToEnd<armnn::DataType::Signed32>(tosaDefaultBackends);
+}
+
// Conv2d
TEST_CASE("TosaRefConv2dEndtoEndTestFloat32")
{
diff --git a/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp b/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
index 3c3abc2af3..051965f541 100644
--- a/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
+++ b/src/backends/tosaReference/test/TosaRefLayerSupportTests.cpp
@@ -61,6 +61,58 @@ TEST_CASE("IsLayerSupportedTosaReferenceAdditionUnsupported")
CHECK(!supported);
}
+TEST_CASE("IsLayerSupportedTosaReferenceConcat")
+{
+ TensorShape input0Shape = { 2, 3, 2, 2 };
+ TensorShape input1Shape = { 2, 3, 2, 2 };
+ TensorShape outputShape = { 2, 6, 2, 2 };
+ TensorInfo input0Info(input0Shape, DataType::Float32);
+ TensorInfo input1Info(input1Shape, DataType::Float32);
+ TensorInfo outputInfo(outputShape, DataType::Float32);
+
+ OriginsDescriptor descriptor;
+ std::vector<TensorShape> shapes = {input0Shape, input1Shape} ;
+ unsigned int concatAxis = 1;
+ descriptor = CreateDescriptorForConcatenation(shapes.begin(), shapes.end(), concatAxis);
+
+ TosaRefLayerSupport supportChecker;
+ std::string reasonIfNotSupported;
+ auto supported = supportChecker.IsLayerSupported(LayerType::Concat,
+ {input0Info, input1Info, outputInfo},
+ descriptor,
+ EmptyOptional(),
+ EmptyOptional(),
+ reasonIfNotSupported);
+
+ CHECK(supported);
+}
+
+TEST_CASE("IsLayerSupportedTosaReferenceConcatUnsupported")
+{
+ TensorShape input0Shape = { 2, 3, 2, 2 };
+ TensorShape input1Shape = { 2, 3, 2, 2 };
+ TensorShape outputShape = { 2, 6, 2, 2 };
+ TensorInfo input0Info(input0Shape, armnn::DataType::QAsymmU8);
+ TensorInfo input1Info(input1Shape, armnn::DataType::QAsymmU8);
+ TensorInfo outputInfo(outputShape, armnn::DataType::QAsymmU8);
+
+ OriginsDescriptor descriptor;
+ std::vector<armnn::TensorShape> shapes = {input0Shape, input1Shape} ;
+ unsigned int concatAxis = 1;
+ descriptor = armnn::CreateDescriptorForConcatenation(shapes.begin(), shapes.end(), concatAxis);
+
+ TosaRefLayerSupport supportChecker;
+ std::string reasonIfNotSupported;
+ auto supported = supportChecker.IsLayerSupported(LayerType::Concat,
+ {input0Info, input1Info, outputInfo},
+ descriptor,
+ EmptyOptional(),
+ EmptyOptional(),
+ reasonIfNotSupported);
+
+ CHECK(!supported);
+}
+
TEST_CASE("IsLayerSupportedTosaReferenceConstant")
{
TensorInfo outputInfo({1,1,3,4}, DataType::Float32);