aboutsummaryrefslogtreecommitdiff
path: root/src/armnnSerializer
diff options
context:
space:
mode:
authorTeresa Charlin <teresa.charlinreyes@arm.com>2021-05-31 18:47:33 +0100
committerJim Flynn <jim.flynn@arm.com>2021-06-16 14:26:12 +0000
commit50de4fa4e7e0dd02a442ba350a1b40f293cb5a01 (patch)
treeb37e0ae81033a1cb70911750affe2961682dd62d /src/armnnSerializer
parent2ef580100c8de1bf8acea854607ac1e552e9703f (diff)
downloadarmnn-50de4fa4e7e0dd02a442ba350a1b40f293cb5a01.tar.gz
IVGCVSW-6088 Add Sin and Log to ElementWiseUnary
* Ref workload * Cl workload * Neon workload * Serializer * Deserializer * Remove boost include from TensorTest.cpp Signed-off-by: Teresa Charlin <teresa.charlinreyes@arm.com> Change-Id: I498548169cc77609c55cf3105f1de5a7429772cf
Diffstat (limited to 'src/armnnSerializer')
-rw-r--r--src/armnnSerializer/ArmnnSchema.fbs4
-rw-r--r--src/armnnSerializer/ArmnnSchema_generated.h16
-rw-r--r--src/armnnSerializer/SerializerUtils.cpp4
-rw-r--r--src/armnnSerializer/test/SerializerTests.cpp105
4 files changed, 64 insertions, 65 deletions
diff --git a/src/armnnSerializer/ArmnnSchema.fbs b/src/armnnSerializer/ArmnnSchema.fbs
index 1c9a1de792..753c2443a4 100644
--- a/src/armnnSerializer/ArmnnSchema.fbs
+++ b/src/armnnSerializer/ArmnnSchema.fbs
@@ -287,7 +287,9 @@ enum UnaryOperation : byte {
Sqrt = 2,
Exp = 3,
Neg = 4,
- LogicalNot = 5
+ LogicalNot = 5,
+ Log = 6,
+ Sin = 7
}
table ElementwiseUnaryDescriptor {
diff --git a/src/armnnSerializer/ArmnnSchema_generated.h b/src/armnnSerializer/ArmnnSchema_generated.h
index fc55d9befa..675fcc6490 100644
--- a/src/armnnSerializer/ArmnnSchema_generated.h
+++ b/src/armnnSerializer/ArmnnSchema_generated.h
@@ -931,37 +931,43 @@ enum UnaryOperation {
UnaryOperation_Exp = 3,
UnaryOperation_Neg = 4,
UnaryOperation_LogicalNot = 5,
+ UnaryOperation_Log = 6,
+ UnaryOperation_Sin = 7,
UnaryOperation_MIN = UnaryOperation_Abs,
- UnaryOperation_MAX = UnaryOperation_LogicalNot
+ UnaryOperation_MAX = UnaryOperation_Sin
};
-inline const UnaryOperation (&EnumValuesUnaryOperation())[6] {
+inline const UnaryOperation (&EnumValuesUnaryOperation())[8] {
static const UnaryOperation values[] = {
UnaryOperation_Abs,
UnaryOperation_Rsqrt,
UnaryOperation_Sqrt,
UnaryOperation_Exp,
UnaryOperation_Neg,
- UnaryOperation_LogicalNot
+ UnaryOperation_LogicalNot,
+ UnaryOperation_Log,
+ UnaryOperation_Sin
};
return values;
}
inline const char * const *EnumNamesUnaryOperation() {
- static const char * const names[7] = {
+ static const char * const names[9] = {
"Abs",
"Rsqrt",
"Sqrt",
"Exp",
"Neg",
"LogicalNot",
+ "Log",
+ "Sin",
nullptr
};
return names;
}
inline const char *EnumNameUnaryOperation(UnaryOperation e) {
- if (flatbuffers::IsOutRange(e, UnaryOperation_Abs, UnaryOperation_LogicalNot)) return "";
+ if (flatbuffers::IsOutRange(e, UnaryOperation_Abs, UnaryOperation_Sin)) return "";
const size_t index = static_cast<size_t>(e);
return EnumNamesUnaryOperation()[index];
}
diff --git a/src/armnnSerializer/SerializerUtils.cpp b/src/armnnSerializer/SerializerUtils.cpp
index 936fb531d5..1df8d4e608 100644
--- a/src/armnnSerializer/SerializerUtils.cpp
+++ b/src/armnnSerializer/SerializerUtils.cpp
@@ -119,6 +119,10 @@ armnnSerializer::UnaryOperation GetFlatBufferUnaryOperation(armnn::UnaryOperatio
return armnnSerializer::UnaryOperation::UnaryOperation_Neg;
case armnn::UnaryOperation::LogicalNot:
return armnnSerializer::UnaryOperation::UnaryOperation_LogicalNot;
+ case armnn::UnaryOperation::Log:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Log;
+ case armnn::UnaryOperation::Sin:
+ return armnnSerializer::UnaryOperation::UnaryOperation_Sin;
default:
throw armnn::InvalidArgumentException("Unary operation unknown");
}
diff --git a/src/armnnSerializer/test/SerializerTests.cpp b/src/armnnSerializer/test/SerializerTests.cpp
index 4cb1a81b1a..8e7ca37cfa 100644
--- a/src/armnnSerializer/test/SerializerTests.cpp
+++ b/src/armnnSerializer/test/SerializerTests.cpp
@@ -23,31 +23,6 @@ using armnnDeserializer::IDeserializer;
TEST_SUITE("SerializerTests")
{
-TEST_CASE("SerializeAbs")
-{
- const std::string layerName("abs");
- const armnn::TensorInfo tensorInfo({1, 2, 3}, armnn::DataType::Float32);
-
- armnn::INetworkPtr network = armnn::INetwork::Create();
- armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
-
- ARMNN_NO_DEPRECATE_WARN_BEGIN
- armnn::IConnectableLayer* const absLayer = network->AddAbsLayer(layerName.c_str());
- ARMNN_NO_DEPRECATE_WARN_END
- armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
- inputLayer->GetOutputSlot(0).Connect(absLayer->GetInputSlot(0));
- absLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
- inputLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
- absLayer->GetOutputSlot(0).SetTensorInfo(tensorInfo);
-
- armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
- CHECK(deserializedNetwork);
-
- LayerVerifierBase verifier(layerName, {tensorInfo}, {tensorInfo});
- deserializedNetwork->ExecuteStrategy(verifier);
-}
TEST_CASE("SerializeAddition")
{
@@ -719,6 +694,51 @@ TEST_CASE("SerializeDeserializeEqual")
deserializedNetwork->ExecuteStrategy(verifier);
}
+void SerializeElementwiseUnaryTest(armnn::UnaryOperation unaryOperation)
+{
+ auto layerName = GetUnaryOperationAsCString(unaryOperation);
+
+ const armnn::TensorShape shape{2, 1, 2, 2};
+
+ const armnn::TensorInfo inputInfo = armnn::TensorInfo(shape, armnn::DataType::Float32);
+ const armnn::TensorInfo outputInfo = armnn::TensorInfo(shape, armnn::DataType::Float32);
+
+ armnn::ElementwiseUnaryDescriptor descriptor(unaryOperation);
+
+ armnn::INetworkPtr network = armnn::INetwork::Create();
+ armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
+ armnn::IConnectableLayer* const elementwiseUnaryLayer =
+ network->AddElementwiseUnaryLayer(descriptor, layerName);
+ armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
+
+ inputLayer->GetOutputSlot(0).Connect(elementwiseUnaryLayer->GetInputSlot(0));
+ elementwiseUnaryLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
+
+ inputLayer->GetOutputSlot(0).SetTensorInfo(inputInfo);
+ elementwiseUnaryLayer->GetOutputSlot(0).SetTensorInfo(outputInfo);
+
+ armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
+
+ CHECK(deserializedNetwork);
+
+ LayerVerifierBaseWithDescriptor<armnn::ElementwiseUnaryDescriptor>
+ verifier(layerName, { inputInfo }, { outputInfo }, descriptor);
+
+ deserializedNetwork->ExecuteStrategy(verifier);
+}
+
+TEST_CASE("SerializeElementwiseUnary")
+{
+ using op = armnn::UnaryOperation;
+ std::initializer_list<op> allUnaryOperations = {op::Abs, op::Exp, op::Sqrt, op::Rsqrt, op::Neg,
+ op::LogicalNot, op::Log, op::Sin};
+
+ for (auto unaryOperation : allUnaryOperations)
+ {
+ SerializeElementwiseUnaryTest(unaryOperation);
+ }
+}
+
TEST_CASE("SerializeFill")
{
const std::string layerName("fill");
@@ -1114,39 +1134,6 @@ TEST_CASE("SerializeLogicalBinary")
deserializedNetwork->ExecuteStrategy(verifier);
}
-TEST_CASE("SerializeLogicalUnary")
-{
- const std::string layerName("elementwiseUnaryLogicalNot");
-
- const armnn::TensorShape shape{2, 1, 2, 2};
-
- const armnn::TensorInfo inputInfo = armnn::TensorInfo(shape, armnn::DataType::Boolean);
- const armnn::TensorInfo outputInfo = armnn::TensorInfo(shape, armnn::DataType::Boolean);
-
- armnn::ElementwiseUnaryDescriptor descriptor(armnn::UnaryOperation::LogicalNot);
-
- armnn::INetworkPtr network = armnn::INetwork::Create();
- armnn::IConnectableLayer* const inputLayer = network->AddInputLayer(0);
- armnn::IConnectableLayer* const elementwiseUnaryLayer =
- network->AddElementwiseUnaryLayer(descriptor, layerName.c_str());
- armnn::IConnectableLayer* const outputLayer = network->AddOutputLayer(0);
-
- inputLayer->GetOutputSlot(0).Connect(elementwiseUnaryLayer->GetInputSlot(0));
- elementwiseUnaryLayer->GetOutputSlot(0).Connect(outputLayer->GetInputSlot(0));
-
- inputLayer->GetOutputSlot(0).SetTensorInfo(inputInfo);
- elementwiseUnaryLayer->GetOutputSlot(0).SetTensorInfo(outputInfo);
-
- armnn::INetworkPtr deserializedNetwork = DeserializeNetwork(SerializeNetwork(*network));
-
- CHECK(deserializedNetwork);
-
- LayerVerifierBaseWithDescriptor<armnn::ElementwiseUnaryDescriptor> verifier(
- layerName, { inputInfo }, { outputInfo }, descriptor);
-
- deserializedNetwork->ExecuteStrategy(verifier);
-}
-
TEST_CASE("SerializeLogSoftmax")
{
const std::string layerName("log_softmax");
@@ -2462,4 +2449,4 @@ TEST_CASE("SerializeDeserializeNonLinearNetwork")
deserializedNetwork->ExecuteStrategy(verifier);
}
-}
+} \ No newline at end of file