From 4b10fef654c5d54b73cc6f09327a88976d8c0fc4 Mon Sep 17 00:00:00 2001 From: Teresa Charlin Date: Wed, 29 Jul 2020 09:36:41 +0100 Subject: IVGCVSW-4712 Fill layer datatype adjustments * Input layer to be int32 instead of same type as output * Enable float16 end to end tests * Neon and Cl layer support check for backend Signed-off-by: Teresa Charlin Change-Id: I6bc889077c8da63eeff66bd45730ce5d8783c419 --- src/armnnDeserializer/test/DeserializeFill.cpp | 4 ++-- src/armnnSerializer/test/SerializerTests.cpp | 2 +- src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp | 14 +++++++++----- .../backendsCommon/test/layerTests/FillTestImpl.cpp | 7 ++----- src/backends/cl/ClLayerSupport.cpp | 14 +++++++++----- src/backends/cl/test/ClEndToEndTests.cpp | 5 +++++ src/backends/neon/NeonLayerSupport.cpp | 14 +++++++++----- src/backends/neon/test/NeonEndToEndTests.cpp | 5 +++++ src/backends/reference/RefLayerSupport.cpp | 2 +- src/backends/reference/test/RefEndToEndTests.cpp | 8 ++++---- 10 files changed, 47 insertions(+), 28 deletions(-) diff --git a/src/armnnDeserializer/test/DeserializeFill.cpp b/src/armnnDeserializer/test/DeserializeFill.cpp index 632734fa9e..163a0fe968 100644 --- a/src/armnnDeserializer/test/DeserializeFill.cpp +++ b/src/armnnDeserializer/test/DeserializeFill.cpp @@ -34,7 +34,7 @@ struct FillFixture : public ParserFlatbuffersSerializeFixture dimensions: [ 4 ], - dataType: "Float32", + dataType: "Signed32", quantizationScale: 0.0 } } @@ -125,7 +125,7 @@ struct SimpleFillFixture : FillFixture BOOST_FIXTURE_TEST_CASE(Fill, SimpleFillFixture) { - RunTest<4, armnn::DataType::Float32>( + RunTest<4, armnn::DataType::Signed32, armnn::DataType::Float32>( 0, {{"InputLayer", { 1, 3, 3, 1 }}}, {{"OutputLayer",{ 1, 1, 1, 1, 1, 1, 1, 1, 1}}}); diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index e059511fc2..e00fb4dcde 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -1204,7 +1204,7 @@ BOOST_AUTO_TEST_CASE(SerializeFill) DECLARE_LAYER_VERIFIER_CLASS_WITH_DESCRIPTOR(Fill) const std::string layerName("fill"); - const armnn::TensorInfo inputInfo({4}, armnn::DataType::Float32); + const armnn::TensorInfo inputInfo({4}, armnn::DataType::Signed32); const armnn::TensorInfo outputInfo({1, 3, 3, 1}, armnn::DataType::Float32); armnn::FillDescriptor descriptor(1.0f); diff --git a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp index f734a948ab..5d7601b14b 100644 --- a/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp +++ b/src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp @@ -39,27 +39,31 @@ void FillEndToEnd(const std::vector& backends) FillDescriptor descriptor; descriptor.m_Value = 9; - std::vector inputData{ + std::vector inputData { 1, 1, 5, 3 }; - std::vector expectedOutputData{ + std::vector floatExpectedOutputData { 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9 }; + std::vector expectedOutputData = armnnUtils::QuantizedVector(floatExpectedOutputData); - TensorInfo inputInfo ({ 4 }, ArmnnType); + TensorInfo inputInfo ({ 4 }, DataType::Signed32); TensorInfo outputInfo({ 1, 1, 5, 3 }, ArmnnType); armnn::INetworkPtr network = CreateFillNetwork(inputInfo, outputInfo, descriptor); BOOST_TEST_CHECKPOINT("create a network"); - std::map> inputTensorData = {{ 0, inputData }}; + std::map> inputTensorData = {{ 0, inputData }}; std::map> expectedOutputTensorData = {{ 0, expectedOutputData }}; - EndToEndLayerTestImpl(move(network), inputTensorData, expectedOutputTensorData, backends); + EndToEndLayerTestImpl(move(network), + inputTensorData, + expectedOutputTensorData, + backends); } } // anonymous namespace \ No newline at end of file diff --git a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp index 64970fecdf..040a988729 100644 --- a/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp +++ b/src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp @@ -17,13 +17,10 @@ LayerTestResult SimpleFillTest( const armnn::IBackendInternal::IMemoryManagerSharedPtr& memoryManager) { IgnoreUnused(memoryManager); - armnn::TensorInfo inputTensorInfo({4}, ArmnnType); - inputTensorInfo.SetQuantizationScale(0.0f); - + armnn::TensorInfo inputTensorInfo({4}, armnn::DataType::Signed32); armnn::TensorInfo outputTensorInfo({2, 2, 3, 2}, ArmnnType); - outputTensorInfo.SetQuantizationScale(0.0f); - auto input = MakeTensor(inputTensorInfo, ConvertToDataType( + auto input = MakeTensor(inputTensorInfo, ConvertToDataType( {2, 2, 3, 2}, inputTensorInfo)); diff --git a/src/backends/cl/ClLayerSupport.cpp b/src/backends/cl/ClLayerSupport.cpp index 74b5aadb03..1af5c91fc5 100644 --- a/src/backends/cl/ClLayerSupport.cpp +++ b/src/backends/cl/ClLayerSupport.cpp @@ -430,12 +430,16 @@ bool ClLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input, } } -bool ClLayerSupport::IsFillSupported(const TensorInfo&, - const TensorInfo&, - const FillDescriptor&, - Optional) const +bool ClLayerSupport::IsFillSupported(const TensorInfo& input, + const TensorInfo& output, + const FillDescriptor& descriptor, + Optional reasonIfUnsupported) const { - return true; + armnn::IgnoreUnused(input); + armnn::IgnoreUnused(output); + armnn::IgnoreUnused(descriptor); + + return IsClBackendSupported(reasonIfUnsupported); } bool ClLayerSupport::IsFloorSupported(const TensorInfo& input, diff --git a/src/backends/cl/test/ClEndToEndTests.cpp b/src/backends/cl/test/ClEndToEndTests.cpp index 0ac1b2a1e6..edee368fa9 100644 --- a/src/backends/cl/test/ClEndToEndTests.cpp +++ b/src/backends/cl/test/ClEndToEndTests.cpp @@ -237,6 +237,11 @@ BOOST_AUTO_TEST_CASE(ClFillEndToEndTest) FillEndToEnd(defaultBackends); } +BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16) +{ + FillEndToEnd(defaultBackends); +} + BOOST_AUTO_TEST_CASE(ClFillEndToEndTestInt32) { FillEndToEnd(defaultBackends); diff --git a/src/backends/neon/NeonLayerSupport.cpp b/src/backends/neon/NeonLayerSupport.cpp index b848f0c10f..9dc8a01778 100644 --- a/src/backends/neon/NeonLayerSupport.cpp +++ b/src/backends/neon/NeonLayerSupport.cpp @@ -406,12 +406,16 @@ bool NeonLayerSupport::IsElementwiseUnarySupported(const TensorInfo& input, } } -bool NeonLayerSupport::IsFillSupported(const TensorInfo&, - const TensorInfo&, - const FillDescriptor&, - Optional) const +bool NeonLayerSupport::IsFillSupported(const TensorInfo& input, + const TensorInfo& output, + const FillDescriptor& descriptor, + Optional reasonIfUnsupported) const { - return true; + armnn::IgnoreUnused(input); + armnn::IgnoreUnused(output); + armnn::IgnoreUnused(descriptor); + + return IsNeonBackendSupported(reasonIfUnsupported); } bool NeonLayerSupport::IsFloorSupported(const TensorInfo& input, diff --git a/src/backends/neon/test/NeonEndToEndTests.cpp b/src/backends/neon/test/NeonEndToEndTests.cpp index e89718a05e..ffbae51df6 100644 --- a/src/backends/neon/test/NeonEndToEndTests.cpp +++ b/src/backends/neon/test/NeonEndToEndTests.cpp @@ -452,6 +452,11 @@ BOOST_AUTO_TEST_CASE(NeonFillEndToEndTest) FillEndToEnd(defaultBackends); } +BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16) +{ + FillEndToEnd(defaultBackends); +} + BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32) { FillEndToEnd(defaultBackends); diff --git a/src/backends/reference/RefLayerSupport.cpp b/src/backends/reference/RefLayerSupport.cpp index 80527bdcb2..f6c214e2c6 100644 --- a/src/backends/reference/RefLayerSupport.cpp +++ b/src/backends/reference/RefLayerSupport.cpp @@ -874,7 +874,7 @@ bool RefLayerSupport::IsFillSupported(const TensorInfo& input, DataType::Signed32 }; - supported &= CheckSupportRule(TypeAnyOf(input, supportedTypes), reasonIfUnsupported, + supported &= CheckSupportRule(TypeIs(input, DataType::Signed32), reasonIfUnsupported, "Reference Fill: input type not supported."); supported &= CheckSupportRule(TypeAnyOf(output, supportedTypes), reasonIfUnsupported, diff --git a/src/backends/reference/test/RefEndToEndTests.cpp b/src/backends/reference/test/RefEndToEndTests.cpp index 027b621c23..4598568070 100644 --- a/src/backends/reference/test/RefEndToEndTests.cpp +++ b/src/backends/reference/test/RefEndToEndTests.cpp @@ -589,10 +589,10 @@ BOOST_AUTO_TEST_CASE(RefFillEndToEndTest) FillEndToEnd(defaultBackends); } -//BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16) -//{ -// FillEndToEnd(defaultBackends); -//} +BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16) +{ + FillEndToEnd(defaultBackends); +} BOOST_AUTO_TEST_CASE(RefFillEndToEndTestInt32) { -- cgit v1.2.1