diff options
author | Matthew Sloyan <matthew.sloyan@arm.com> | 2022-11-09 16:28:51 +0000 |
---|---|---|
committer | Teresa Charlin <teresa.charlinreyes@arm.com> | 2022-11-09 19:27:49 +0000 |
commit | 5c54c3874ff5dc1656b9f28288e46086586f21b9 (patch) | |
tree | 81fefa759a5907faa92df55818fcc382ee67210a /src/backends/tosaCommon | |
parent | 717a95ee6fb732bf22adee1e4f55b7ea30db5052 (diff) | |
download | armnn-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')
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); |