diff options
author | Cathal Corbett <cathal.corbett@arm.com> | 2022-08-17 17:30:16 +0100 |
---|---|---|
committer | Nikhil Raj <nikhil.raj@arm.com> | 2022-08-30 11:22:42 +0100 |
commit | 9c9d5b9d796d243d88bd7a7aebb2e7e6c467e3a4 (patch) | |
tree | 667ba3bebdd9f291a9c7715397c1e4f877acfa7b /src/backends/tosaCommon/test | |
parent | 059660ede6a3db57049e552d934ba1cb8ea18146 (diff) | |
download | armnn-9c9d5b9d796d243d88bd7a7aebb2e7e6c467e3a4.tar.gz |
IVGCVSW-7133 Add TosaMappings backbone structure with support for Addition TosaMappings operator.
Signed-off-by: Cathal Corbett <cathal.corbett@arm.com>
Change-Id: Ibea0cf625b3af4ab38e8b985f7a129c983ca9659
Diffstat (limited to 'src/backends/tosaCommon/test')
-rw-r--r-- | src/backends/tosaCommon/test/CMakeLists.txt | 14 | ||||
-rw-r--r-- | src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp | 124 |
2 files changed, 138 insertions, 0 deletions
diff --git a/src/backends/tosaCommon/test/CMakeLists.txt b/src/backends/tosaCommon/test/CMakeLists.txt new file mode 100644 index 0000000000..56cc66e51c --- /dev/null +++ b/src/backends/tosaCommon/test/CMakeLists.txt @@ -0,0 +1,14 @@ +# +# Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +# SPDX-License-Identifier: MIT +# + +list(APPEND armnnTosaBackendUnitTests_sources + TosaOperatorMappingTests.cpp + ) + +add_library(armnnTosaBackendUnitTests OBJECT ${armnnTosaBackendUnitTests_sources}) +target_include_directories(armnnTosaBackendUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnn) +target_include_directories(armnnTosaBackendUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnUtils) +target_include_directories(armnnTosaBackendUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/armnnTestUtils) +target_include_directories(armnnTosaBackendUnitTests PRIVATE ${PROJECT_SOURCE_DIR}/src/backends) diff --git a/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp b/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp new file mode 100644 index 0000000000..2f5a56d88d --- /dev/null +++ b/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp @@ -0,0 +1,124 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include <Layer.hpp> + +#include <tosaCommon/TosaMappings.hpp> + +#include <doctest/doctest.h> + +using namespace armnn; +using namespace tosa; + +void AssertTosaOneToOneMappingBasicBlock(TosaSerializationBasicBlock* basicBlock, + std::vector<int32_t> shape, + uint32_t numInputs, + uint32_t numOutputs, + Op tosaOp, + std::string operatorString, + DType dataType = DType_FLOAT) +{ + std::string blockStr = operatorString + "_block_"; + ARMNN_ASSERT(basicBlock->GetName().find(blockStr) != std::string::npos); + ARMNN_ASSERT(basicBlock->GetInputs().size() == numInputs); + ARMNN_ASSERT(basicBlock->GetOutputs().size() == numOutputs); + ARMNN_ASSERT(basicBlock->GetOperators().size() == 1); + ARMNN_ASSERT(basicBlock->GetTensors().size() == (numInputs + numOutputs)); + + TosaSerializationOperator* op = basicBlock->GetOperators().at(0); + ARMNN_ASSERT(op->GetInputTensorNames().size() == numInputs); + ARMNN_ASSERT(op->GetOutputTensorNames().size() == numOutputs); + + for (uint32_t i = 0; i < numInputs; i++) + { + std::basic_string<char> blockInputName = basicBlock->GetInputs()[i]; + std::basic_string<char> operatorInputName = op->GetInputTensorNames()[i]; + std::basic_string<char> tensorName = basicBlock->GetTensors()[i]->GetName(); + + std::string opStr = operatorString + "_input" + std::to_string(i) + "_"; + + ARMNN_ASSERT(blockInputName == operatorInputName); + ARMNN_ASSERT(tensorName == operatorInputName); + ARMNN_ASSERT(blockInputName.find(opStr) != std::string::npos); + } + + for (uint32_t i = 0; i < numOutputs; i++) + { + std::basic_string<char> blockOutputName = basicBlock->GetOutputs()[i]; + std::basic_string<char> operatorOutputName = op->GetOutputTensorNames()[i]; + std::basic_string<char> tensorName = basicBlock->GetTensors()[numInputs + i]->GetName(); + + std::string opStr = operatorString + "_output" + std::to_string(i) + "_"; + + ARMNN_ASSERT(blockOutputName == operatorOutputName); + ARMNN_ASSERT(tensorName == operatorOutputName); + ARMNN_ASSERT(blockOutputName.find(opStr) != std::string::npos); + } + + ARMNN_ASSERT(op->GetAttributeType() == Attribute_NONE); + ARMNN_ASSERT(op->GetOp() == tosaOp); + + TosaSerializationTensor* tensor0 = basicBlock->GetTensors()[0]; + ARMNN_ASSERT(tensor0->GetDtype() == dataType); + ARMNN_ASSERT(tensor0->GetData().size() == 0); + ARMNN_ASSERT(tensor0->GetShape() == shape); +} + +TEST_SUITE("TosaOperatorMappingOneToOneTests") +{ +TEST_CASE("GetTosaMapping_AdditionLayer") +{ + TensorInfo info = TensorInfo({ 1, 2, 4, 2 }, DataType::Float32, 0.0f, 0, true); + TosaSerializationBasicBlock* basicBlock = + GetTosaMapping(LayerType::Addition, {&info, &info}, {&info}, BaseDescriptor()); + AssertTosaOneToOneMappingBasicBlock(basicBlock, { 1, 2, 4, 2 }, 2, 1, Op::Op_ADD, "Op_ADD"); +} + +TEST_CASE("GetTosaMappingFromLayer_AdditionLayer") +{ + IRuntime::CreationOptions options; + IRuntimePtr runtime(IRuntime::Create(options)); + + // Builds up the structure of the network. + INetworkPtr net(INetwork::Create()); + + IConnectableLayer* input0 = net->AddInputLayer(0, "input0"); + IConnectableLayer* input1 = net->AddInputLayer(1, "input1"); + IConnectableLayer* add = net->AddAdditionLayer("add"); + IConnectableLayer* output = net->AddOutputLayer(0, "output"); + + input0->GetOutputSlot(0).Connect(add->GetInputSlot(0)); + input1->GetOutputSlot(0).Connect(add->GetInputSlot(1)); + add->GetOutputSlot(0).Connect(output->GetInputSlot(0)); + + TensorInfo info = TensorInfo({ 1, 2, 4, 2 }, DataType::Float32, 0.0f, 0, true); + + input0->GetOutputSlot(0).SetTensorInfo(info); + input1->GetOutputSlot(0).SetTensorInfo(info); + add->GetOutputSlot(0).SetTensorInfo(info); + + TosaSerializationBasicBlock* basicBlock = + GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(add)); + AssertTosaOneToOneMappingBasicBlock(basicBlock, { 1, 2, 4, 2 }, 2, 1, Op::Op_ADD, "Op_ADD"); +} + +TEST_CASE("GetTosaMapping_Unimplemented") +{ + TosaSerializationBasicBlock* basicBlock = + GetTosaMapping(LayerType::UnidirectionalSequenceLstm, {}, {}, BaseDescriptor()); + + ARMNN_ASSERT(basicBlock->GetName() == ""); + ARMNN_ASSERT(basicBlock->GetTensors().size() == 0); + ARMNN_ASSERT(basicBlock->GetOperators().size() == 1); + ARMNN_ASSERT(basicBlock->GetInputs().size() == 0); + ARMNN_ASSERT(basicBlock->GetOutputs().size() == 0); + + TosaSerializationOperator* op = basicBlock->GetOperators()[0]; + ARMNN_ASSERT(op->GetAttributeType() == Attribute_NONE); + ARMNN_ASSERT(op->GetOp() == tosa::Op_UNKNOWN); + ARMNN_ASSERT(op->GetInputTensorNames().size() == 0); + ARMNN_ASSERT(op->GetOutputTensorNames().size() == 0); +} +} |