From 5b58e31109f661f70331048e22f8a66934e74d15 Mon Sep 17 00:00:00 2001 From: Kevin May Date: Thu, 15 Dec 2022 10:15:21 +0000 Subject: 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 Change-Id: I247b4b2365d5f0173218c5dfd11fba12d2399959 --- src/backends/tosaReference/TosaRefLayerSupport.cpp | 7 +++ .../tosaReference/test/TosaRefEndToEndTests.cpp | 42 +++++++++++++++++ .../test/TosaRefLayerSupportTests.cpp | 52 ++++++++++++++++++++++ 3 files changed, 101 insertions(+) (limited to 'src/backends/tosaReference') 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(tosaDefaultBackends); } +// Concat +TEST_CASE("TosaRefConcatEndToEndDim0TestFloat32") +{ + ConcatDim0EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim0TestInt32") +{ + ConcatDim0EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim1TestFloat32") +{ + ConcatDim1EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim1TestInt32") +{ + ConcatDim1EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim2TestFloat32") +{ + ConcatDim2EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim2TestInt32") +{ + ConcatDim2EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim3TestFloat32") +{ + ConcatDim3EndToEnd(tosaDefaultBackends); +} + +TEST_CASE("TosaRefConcatEndToEndDim3TestInt32") +{ + ConcatDim3EndToEnd(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 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 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); -- cgit v1.2.1