aboutsummaryrefslogtreecommitdiff
path: root/src/backends/tosaCommon
diff options
context:
space:
mode:
authorMatthew Sloyan <matthew.sloyan@arm.com>2022-11-09 16:28:51 +0000
committerTeresa Charlin <teresa.charlinreyes@arm.com>2022-11-09 19:27:49 +0000
commit5c54c3874ff5dc1656b9f28288e46086586f21b9 (patch)
tree81fefa759a5907faa92df55818fcc382ee67210a /src/backends/tosaCommon
parent717a95ee6fb732bf22adee1e4f55b7ea30db5052 (diff)
downloadarmnn-5c54c3874ff5dc1656b9f28288e46086586f21b9.tar.gz
IVGCVSW-7165 Implement TosaRefPreCompiledWorkload::Execute()
* Added FP32 support for TOSA Reference Backend. * Added main block creation to OptimizeSubgraphView, this will only occur once. Change-Id: I169dac50b78e2c693da6327962c9f1d3ae3bd712 Signed-off-by: James Conroy <james.conroy@arm.com> Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Diffstat (limited to 'src/backends/tosaCommon')
-rw-r--r--src/backends/tosaCommon/TosaMappings.cpp10
-rw-r--r--src/backends/tosaCommon/TosaMappings.hpp5
-rw-r--r--src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp9
-rw-r--r--src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp3
-rw-r--r--src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp6
5 files changed, 22 insertions, 11 deletions
diff --git a/src/backends/tosaCommon/TosaMappings.cpp b/src/backends/tosaCommon/TosaMappings.cpp
index 3c14bfd1f9..71d2012cbc 100644
--- a/src/backends/tosaCommon/TosaMappings.cpp
+++ b/src/backends/tosaCommon/TosaMappings.cpp
@@ -26,13 +26,14 @@ void SetBasicBlockConstantTensorData(Layer* layer, TosaSerializationBasicBlock*
TosaSerializationBasicBlock* GetTosaMapping(const LayerType type,
const std::vector<const TensorInfo*>& inputs,
const std::vector<const TensorInfo*>& outputs,
- const BaseDescriptor& /*descriptor*/)
+ const BaseDescriptor& /*descriptor*/,
+ bool isMain = false)
{
switch (type)
{
case LayerType::Addition:
{
- return ConvertAdditionToTosaOperator(inputs, outputs);
+ return ConvertAdditionToTosaOperator(inputs, outputs, isMain);
}
default:
{
@@ -43,7 +44,7 @@ TosaSerializationBasicBlock* GetTosaMapping(const LayerType type,
}
}
-TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer)
+TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer, bool isMain = false)
{
std::vector<const TensorInfo*> inputs;
for (auto inputSlot : layer->GetInputSlots())
@@ -60,7 +61,8 @@ TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer)
TosaSerializationBasicBlock* basicBlock = GetTosaMapping(layer->GetType(),
inputs,
outputs,
- layer->GetParameters());
+ layer->GetParameters(),
+ isMain);
SetBasicBlockConstantTensorData(layer, basicBlock);
return basicBlock;
}
diff --git a/src/backends/tosaCommon/TosaMappings.hpp b/src/backends/tosaCommon/TosaMappings.hpp
index c721bcaf59..7f137ca322 100644
--- a/src/backends/tosaCommon/TosaMappings.hpp
+++ b/src/backends/tosaCommon/TosaMappings.hpp
@@ -26,8 +26,9 @@ void SetBasicBlockConstantTensorData(Layer* layer, TosaSerializationBasicBlock*
TosaSerializationBasicBlock* GetTosaMapping(const LayerType type,
const std::vector<const TensorInfo*>& inputs,
const std::vector<const TensorInfo*>& outputs,
- const BaseDescriptor& /*descriptor*/);
+ const BaseDescriptor& /*descriptor*/,
+ bool isMain);
// Function called in armnn::OptimizeSubgraphView() when access to armnn::Layer is available
// and there is an option to set tosa basic block data from constant layer tenors available from the input layer.
-TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer);
+TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer, bool isMain);
diff --git a/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp b/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp
index 98ea03ac3c..796797728e 100644
--- a/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp
+++ b/src/backends/tosaCommon/operatorMappings/AdditionOperator.cpp
@@ -6,7 +6,8 @@
#include "AdditionOperator.hpp"
TosaSerializationBasicBlock* ConvertAdditionToTosaOperator(const std::vector<const TensorInfo*>& inputs,
- const std::vector<const TensorInfo*>& outputs)
+ const std::vector<const TensorInfo*>& outputs,
+ bool isMain)
{
// A helper function with static global variables ensures uniqueness
// for dynamically generating input, output and block names
@@ -15,6 +16,12 @@ TosaSerializationBasicBlock* ConvertAdditionToTosaOperator(const std::vector<con
std::string outputName = std::string("Op_ADD_output0_") + GetUniqueTosaMappingID();
std::string blockName = std::string("Op_ADD_block_") + GetUniqueTosaMappingID();
+ // If it's the first block, overwrite block name with main.
+ if (isMain)
+ {
+ blockName = std::string("main");
+ }
+
TosaSerializationOperator* op = new TosaSerializationOperator(Op_ADD,
Attribute_NONE,
nullptr,
diff --git a/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp b/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
index 2a9c479d8e..f467bb6d10 100644
--- a/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
+++ b/src/backends/tosaCommon/operatorMappings/AdditionOperator.hpp
@@ -14,5 +14,6 @@ using namespace armnn;
using namespace tosa;
TosaSerializationBasicBlock* ConvertAdditionToTosaOperator(const std::vector<const TensorInfo*>& inputs,
- const std::vector<const TensorInfo*>& outputs);
+ const std::vector<const TensorInfo*>& outputs,
+ bool isMain);
diff --git a/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp b/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp
index f4435bdf42..d7cc5d8f91 100644
--- a/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp
+++ b/src/backends/tosaCommon/test/TosaOperatorMappingTests.cpp
@@ -72,7 +72,7 @@ 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());
+ GetTosaMapping(LayerType::Addition, {&info, &info}, {&info}, BaseDescriptor(), false);
AssertTosaOneToOneMappingBasicBlock(basicBlock, { 1, 2, 4, 2 }, 2, 1, Op::Op_ADD, "Op_ADD");
}
@@ -100,14 +100,14 @@ TEST_CASE("GetTosaMappingFromLayer_AdditionLayer")
add->GetOutputSlot(0).SetTensorInfo(info);
TosaSerializationBasicBlock* basicBlock =
- GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(add));
+ GetTosaMappingFromLayer(PolymorphicDowncast<Layer*>(add), false);
AssertTosaOneToOneMappingBasicBlock(basicBlock, { 1, 2, 4, 2 }, 2, 1, Op::Op_ADD, "Op_ADD");
}
TEST_CASE("GetTosaMapping_Unimplemented")
{
TosaSerializationBasicBlock* basicBlock =
- GetTosaMapping(LayerType::UnidirectionalSequenceLstm, {}, {}, BaseDescriptor());
+ GetTosaMapping(LayerType::UnidirectionalSequenceLstm, {}, {}, BaseDescriptor(), false);
CHECK(basicBlock->GetName() == "");
CHECK(basicBlock->GetTensors().size() == 0);