aboutsummaryrefslogtreecommitdiff
path: root/src/armnnSerializer
diff options
context:
space:
mode:
authorMike Kelly <mike.kelly@arm.com>2021-04-06 12:25:55 +0100
committerMatthew Sloyan <matthew.sloyan@arm.com>2021-04-09 12:38:48 +0100
commit1f140f7226c4ed7bc5cbaf2ce09654eee452f4bf (patch)
tree044d491d429b6da4d85530afd4ea2a310cdbb827 /src/armnnSerializer
parent7c67fabc86b6647855beebac9f6cfe92341357cb (diff)
downloadarmnn-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.fbs3
-rw-r--r--src/armnnSerializer/ArmnnSchema_generated.h14
-rw-r--r--src/armnnSerializer/Serializer.cpp9
-rw-r--r--src/armnnSerializer/SerializerUtils.cpp6
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp14
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");