aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTeresa Charlin <teresa.charlinreyes@arm.com>2020-07-29 09:36:41 +0100
committerKeithARM <keith.davis@arm.com>2020-07-31 11:56:31 +0000
commit4b10fef654c5d54b73cc6f09327a88976d8c0fc4 (patch)
tree4a504eacb860bf1ef3feed4b5acbb79225e480fd
parente8ac13308b84b2ee9bc930ac8d27e657300e462d (diff)
downloadarmnn-4b10fef654c5d54b73cc6f09327a88976d8c0fc4.tar.gz
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 <teresa.charlinreyes@arm.com> Change-Id: I6bc889077c8da63eeff66bd45730ce5d8783c419
-rw-r--r--src/armnnDeserializer/test/DeserializeFill.cpp4
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp2
-rw-r--r--src/backends/backendsCommon/test/FillEndToEndTestImpl.hpp14
-rw-r--r--src/backends/backendsCommon/test/layerTests/FillTestImpl.cpp7
-rw-r--r--src/backends/cl/ClLayerSupport.cpp14
-rw-r--r--src/backends/cl/test/ClEndToEndTests.cpp5
-rw-r--r--src/backends/neon/NeonLayerSupport.cpp14
-rw-r--r--src/backends/neon/test/NeonEndToEndTests.cpp5
-rw-r--r--src/backends/reference/RefLayerSupport.cpp2
-rw-r--r--src/backends/reference/test/RefEndToEndTests.cpp8
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<armnn::BackendId>& backends)
FillDescriptor descriptor;
descriptor.m_Value = 9;
- std::vector<T> inputData{
+ std::vector<int32_t> inputData {
1, 1, 5, 3
};
- std::vector<T> expectedOutputData{
+ std::vector<float> floatExpectedOutputData {
9, 9, 9, 9, 9,
9, 9, 9, 9, 9,
9, 9, 9, 9, 9
};
+ std::vector<T> expectedOutputData = armnnUtils::QuantizedVector<T>(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<int, std::vector<T>> inputTensorData = {{ 0, inputData }};
+ std::map<int, std::vector<int32_t>> inputTensorData = {{ 0, inputData }};
std::map<int, std::vector<T>> expectedOutputTensorData = {{ 0, expectedOutputData }};
- EndToEndLayerTestImpl<ArmnnType, ArmnnType>(move(network), inputTensorData, expectedOutputTensorData, backends);
+ EndToEndLayerTestImpl<DataType::Signed32, ArmnnType>(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<T, 4> 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<T, 1>(inputTensorInfo, ConvertToDataType<ArmnnType>(
+ auto input = MakeTensor<int32_t, 1>(inputTensorInfo, ConvertToDataType<armnn::DataType::Signed32>(
{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<std::string&>) const
+bool ClLayerSupport::IsFillSupported(const TensorInfo& input,
+ const TensorInfo& output,
+ const FillDescriptor& descriptor,
+ Optional<std::string&> 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<armnn::DataType::Float32>(defaultBackends);
}
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+ FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
BOOST_AUTO_TEST_CASE(ClFillEndToEndTestInt32)
{
FillEndToEnd<armnn::DataType::Signed32>(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<std::string&>) const
+bool NeonLayerSupport::IsFillSupported(const TensorInfo& input,
+ const TensorInfo& output,
+ const FillDescriptor& descriptor,
+ Optional<std::string&> 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<armnn::DataType::Float32>(defaultBackends);
}
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+ FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
+
BOOST_AUTO_TEST_CASE(NeonFillEndToEndTestInt32)
{
FillEndToEnd<armnn::DataType::Signed32>(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<armnn::DataType::Float32>(defaultBackends);
}
-//BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
-//{
-// FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
-//}
+BOOST_AUTO_TEST_CASE(RefFillEndToEndTestFloat16)
+{
+ FillEndToEnd<armnn::DataType::Float16>(defaultBackends);
+}
BOOST_AUTO_TEST_CASE(RefFillEndToEndTestInt32)
{