diff options
author | Matthew Sloyan <matthew.sloyan@arm.com> | 2022-10-28 18:02:17 +0100 |
---|---|---|
committer | Matthew Sloyan <matthew.sloyan@arm.com> | 2022-11-02 15:08:37 +0000 |
commit | 164bf4f29f6f1b2a3e6714ef4f5a21fc0fd16c2b (patch) | |
tree | e7296130a787578e1be4d3a93de46a9c466944b4 /src/backends/tosaCommon/TosaMappings.cpp | |
parent | 2e950f4fa774ac995230addea898f3b11bf146cc (diff) | |
download | armnn-164bf4f29f6f1b2a3e6714ef4f5a21fc0fd16c2b.tar.gz |
IVGCVSW-7164 Implement TosaRefBackend::OptimizeSubgraphView
* Added TosaRefBackend::OptimizeSubgraphView implementation.
* Generalised TosaRefLayerSupport::IsLayerSupported to work with any
operator.
* Changed TosaCommon.hpp utils to inline functions.
* Added source files for TosaMappings.hpp and AdditionOperator.hpp.
* Fixed multiple defines issue with HALF_ROUND_STYLE and
HALF_ROUND_TIES_TO_EVEN.
Signed-off-by: Matthew Sloyan <matthew.sloyan@arm.com>
Change-Id: Ib2576ec3fb97faa3a2256b2fb93ec16ac8745760
Diffstat (limited to 'src/backends/tosaCommon/TosaMappings.cpp')
-rw-r--r-- | src/backends/tosaCommon/TosaMappings.cpp | 66 |
1 files changed, 66 insertions, 0 deletions
diff --git a/src/backends/tosaCommon/TosaMappings.cpp b/src/backends/tosaCommon/TosaMappings.cpp new file mode 100644 index 0000000000..3c14bfd1f9 --- /dev/null +++ b/src/backends/tosaCommon/TosaMappings.cpp @@ -0,0 +1,66 @@ +// +// Copyright © 2022 Arm Ltd and Contributors. All rights reserved. +// SPDX-License-Identifier: MIT +// + +#include "TosaMappings.hpp" + +using namespace armnn; +using namespace tosa; + +void SetBasicBlockConstantTensorData(Layer* layer, TosaSerializationBasicBlock* /*basicBlock*/) +{ + switch (layer->GetType()) + { + case LayerType::Convolution2d: + { + // ToDo: using Convolution2d as an example as it has constant tensors for weights and bias. + // ToDo: manually set TosaOperator data of basicBlock where constant tensors exist. + } + default: + // If no switch statement for layer, no constant tensors exist in that layer, return + return; + } +} + +TosaSerializationBasicBlock* GetTosaMapping(const LayerType type, + const std::vector<const TensorInfo*>& inputs, + const std::vector<const TensorInfo*>& outputs, + const BaseDescriptor& /*descriptor*/) +{ + switch (type) + { + case LayerType::Addition: + { + return ConvertAdditionToTosaOperator(inputs, outputs); + } + default: + { + // empty basic block when no tosa mapping implemented/exists + TosaSerializationOperator* op = new TosaSerializationOperator(Op_UNKNOWN, Attribute_NONE, nullptr, {}, {}); + return new TosaSerializationBasicBlock("", {op}, {}, {}, {}); + } + } +} + +TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer) +{ + std::vector<const TensorInfo*> inputs; + for (auto inputSlot : layer->GetInputSlots()) + { + inputs.push_back(&inputSlot.GetConnection()->GetTensorInfo()); + } + + std::vector<const TensorInfo*> outputs; + for (auto& outputSlot : layer->GetOutputSlots()) + { + outputs.push_back(&outputSlot.GetTensorInfo()); + } + + TosaSerializationBasicBlock* basicBlock = GetTosaMapping(layer->GetType(), + inputs, + outputs, + layer->GetParameters()); + SetBasicBlockConstantTensorData(layer, basicBlock); + return basicBlock; +} |