diff options
author | Mike Kelly <mike.kelly@arm.com> | 2021-04-06 12:25:55 +0100 |
---|---|---|
committer | Matthew Sloyan <matthew.sloyan@arm.com> | 2021-04-09 12:38:48 +0100 |
commit | 1f140f7226c4ed7bc5cbaf2ce09654eee452f4bf (patch) | |
tree | 044d491d429b6da4d85530afd4ea2a310cdbb827 /src/armnnSerializer | |
parent | 7c67fabc86b6647855beebac9f6cfe92341357cb (diff) | |
download | armnn-1f140f7226c4ed7bc5cbaf2ce09654eee452f4bf.tar.gz |
MLCE-328 Serializer/Deserializer does not support Signed64
* Added support for Signed64 to flatbuffer's schema & updated source tree
* Added support for Signed64 to TFLite Delegate
* Added support for Signed64 to Serializer
* Added support for Signed64 to Deserializer
* Added unit test for ArgMinMax to Deserializer
* Deprecated m_Output_Type from the ArgMinMaxDescriptor: the output type
is solely determined by the DataType of the output Tensor
* Fixed issue where RefArgMinMaxWorkload could output data using
the wrong DataType
* Added Signed64 to RefLayerSupport::IsArgMinMaxSupported as a supported
type
Signed-off-by: Mike Kelly <mike.kelly@arm.com>
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: Ib622c052a1f8aa3e658262f8bde5a6881a8cbe10
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r-- | src/armnnSerializer/ArmnnSchema.fbs | 3 | ||||
-rw-r--r-- | src/armnnSerializer/ArmnnSchema_generated.h | 14 | ||||
-rw-r--r-- | src/armnnSerializer/Serializer.cpp | 9 | ||||
-rw-r--r-- | src/armnnSerializer/SerializerUtils.cpp | 6 | ||||
-rw-r--r-- | src/armnnSerializer/test/SerializerTests.cpp | 14 |
5 files changed, 36 insertions, 10 deletions
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs index 88d66f76f5..438ea839f8 100644 --- a/src/armnnSerializer/ArmnnSchema.fbs +++ b/src/armnnSerializer/ArmnnSchema.fbs @@ -39,7 +39,8 @@ enum DataType : byte { QAsymmU8 = 6, QSymmS16 = 7, QAsymmS8 = 8, - QSymmS8 = 9 + QSymmS8 = 9, + Signed64 = 10 } enum DataLayout : byte { diff --git a/src/armnnSerializer/ArmnnSchema_generated.h b/src/armnnSerializer/ArmnnSchema_generated.h index 99ab0dc78a..2cd88e2718 100644 --- a/src/armnnSerializer/ArmnnSchema_generated.h +++ b/src/armnnSerializer/ArmnnSchema_generated.h @@ -4,7 +4,6 @@ // // automatically generated by the FlatBuffers compiler, do not modify - #ifndef FLATBUFFERS_GENERATED_ARMNNSCHEMA_ARMNNSERIALIZER_H_ #define FLATBUFFERS_GENERATED_ARMNNSCHEMA_ARMNNSERIALIZER_H_ @@ -466,11 +465,12 @@ enum DataType { DataType_QSymmS16 = 7, DataType_QAsymmS8 = 8, DataType_QSymmS8 = 9, + DataType_Signed64 = 10, DataType_MIN = DataType_Float16, - DataType_MAX = DataType_QSymmS8 + DataType_MAX = DataType_Signed64 }; -inline const DataType (&EnumValuesDataType())[10] { +inline const DataType (&EnumValuesDataType())[11] { static const DataType values[] = { DataType_Float16, DataType_Float32, @@ -481,13 +481,14 @@ inline const DataType (&EnumValuesDataType())[10] { DataType_QAsymmU8, DataType_QSymmS16, DataType_QAsymmS8, - DataType_QSymmS8 + DataType_QSymmS8, + DataType_Signed64 }; return values; } inline const char * const *EnumNamesDataType() { - static const char * const names[11] = { + static const char * const names[12] = { "Float16", "Float32", "QuantisedAsymm8", @@ -498,13 +499,14 @@ inline const char * const *EnumNamesDataType() { "QSymmS16", "QAsymmS8", "QSymmS8", + "Signed64", nullptr }; return names; } inline const char *EnumNameDataType(DataType e) { - if (flatbuffers::IsOutRange(e, DataType_Float16, DataType_QSymmS8)) return ""; + if (flatbuffers::IsOutRange(e, DataType_Float16, DataType_Signed64)) return ""; const size_t index = static_cast<size_t>(e); return EnumNamesDataType()[index]; } diff --git a/src/armnnSerializer/Serializer.cpp b/src/armnnSerializer/Serializer.cpp index ae9ddf29f2..15ae78cb65 100644 --- a/src/armnnSerializer/Serializer.cpp +++ b/src/armnnSerializer/Serializer.cpp @@ -1718,6 +1718,15 @@ flatbuffers::Offset<serializer::ConstTensor> switch (tensorInfo.GetDataType()) { + case armnn::DataType::Signed64: + { + auto fbVector = CreateDataVector<int64_t>(constTensor.GetMemoryArea(), constTensor.GetNumBytes()); + flatbuffers::Offset<serializer::LongData> flatBuffersData = serializer::CreateLongData( + m_flatBufferBuilder, + fbVector); + fbPayload = flatBuffersData.o; + break; + } case armnn::DataType::Float32: case armnn::DataType::Signed32: { diff --git a/src/armnnSerializer/SerializerUtils.cpp b/src/armnnSerializer/SerializerUtils.cpp index 929bf92d24..936fb531d5 100644 --- a/src/armnnSerializer/SerializerUtils.cpp +++ b/src/armnnSerializer/SerializerUtils.cpp @@ -1,5 +1,5 @@ // -// Copyright © 2017 Arm Ltd. All rights reserved. +// Copyright © 2017 Arm Ltd and Contributors. All rights reserved. // SPDX-License-Identifier: MIT // @@ -57,6 +57,8 @@ armnnSerializer::ConstTensorData GetFlatBufferConstTensorData(armnn::DataType da case armnn::DataType::QSymmS8: case armnn::DataType::Boolean: return armnnSerializer::ConstTensorData::ConstTensorData_ByteData; + case armnn::DataType::Signed64: + return armnnSerializer::ConstTensorData::ConstTensorData_LongData; default: return armnnSerializer::ConstTensorData::ConstTensorData_NONE; } @@ -72,6 +74,8 @@ armnnSerializer::DataType GetFlatBufferDataType(armnn::DataType dataType) return armnnSerializer::DataType::DataType_Float16; case armnn::DataType::Signed32: return armnnSerializer::DataType::DataType_Signed32; + case armnn::DataType::Signed64: + return armnnSerializer::DataType::DataType_Signed64; case armnn::DataType::QSymmS16: return armnnSerializer::DataType::DataType_QSymmS16; case armnn::DataType::QAsymmS8: diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp index d7c10cb599..9d44354cdd 100644 --- a/src/armnnSerializer/test/SerializerTests.cpp +++ b/src/armnnSerializer/test/SerializerTests.cpp @@ -76,11 +76,11 @@ BOOST_AUTO_TEST_CASE(SerializeAddition) deserializedNetwork->ExecuteStrategy(verifier); } -BOOST_AUTO_TEST_CASE(SerializeArgMinMax) +void SerializeArgMinMaxTest(armnn::DataType dataType) { const std::string layerName("argminmax"); const armnn::TensorInfo inputInfo({1, 2, 3}, armnn::DataType::Float32); - const armnn::TensorInfo outputInfo({1, 3}, armnn::DataType::Signed32); + const armnn::TensorInfo outputInfo({1, 3}, dataType); armnn::ArgMinMaxDescriptor descriptor; descriptor.m_Function = armnn::ArgMinMaxFunction::Max; @@ -107,6 +107,16 @@ BOOST_AUTO_TEST_CASE(SerializeArgMinMax) deserializedNetwork->ExecuteStrategy(verifier); } +BOOST_AUTO_TEST_CASE(SerializeArgMinMaxSigned32) +{ + SerializeArgMinMaxTest(armnn::DataType::Signed32); +} + +BOOST_AUTO_TEST_CASE(SerializeArgMinMaxSigned64) +{ + SerializeArgMinMaxTest(armnn::DataType::Signed64); +} + BOOST_AUTO_TEST_CASE(SerializeBatchNormalization) { const std::string layerName("batchNormalization"); |