ArmNN
 22.11
TosaMappings.cpp
Go to the documentation of this file.
1 //
2 // Copyright © 2022 Arm Ltd and Contributors. All rights reserved.
3 // SPDX-License-Identifier: MIT
4 //
5 
6 #include "TosaMappings.hpp"
7 
8 using namespace armnn;
9 using namespace tosa;
10 
11 void SetBasicBlockConstantTensorData(Layer* layer, TosaSerializationBasicBlock* /*basicBlock*/)
12 {
13  switch (layer->GetType())
14  {
16  {
17  // ToDo: using Convolution2d as an example as it has constant tensors for weights and bias.
18  // ToDo: manually set TosaOperator data of basicBlock where constant tensors exist.
19  }
20  default:
21  // If no switch statement for layer, no constant tensors exist in that layer, return
22  return;
23  }
24 }
25 
26 TosaSerializationBasicBlock* GetTosaMapping(const LayerType type,
27  const std::vector<const TensorInfo*>& inputs,
28  const std::vector<const TensorInfo*>& outputs,
29  const BaseDescriptor& /*descriptor*/,
30  bool isMain = false)
31 {
32  switch (type)
33  {
35  {
36  return ConvertAdditionToTosaOperator(inputs, outputs, isMain);
37  }
38  default:
39  {
40  // empty basic block when no tosa mapping implemented/exists
41  TosaSerializationOperator* op = new TosaSerializationOperator(Op_UNKNOWN, Attribute_NONE, nullptr, {}, {});
42  return new TosaSerializationBasicBlock("", {op}, {}, {}, {});
43  }
44  }
45 }
46 
47 TosaSerializationBasicBlock* GetTosaMappingFromLayer(Layer* layer, bool isMain = false)
48 {
49  std::vector<const TensorInfo*> inputs;
50  for (auto inputSlot : layer->GetInputSlots())
51  {
52  inputs.push_back(&inputSlot.GetConnection()->GetTensorInfo());
53  }
54 
55  std::vector<const TensorInfo*> outputs;
56  for (auto& outputSlot : layer->GetOutputSlots())
57  {
58  outputs.push_back(&outputSlot.GetTensorInfo());
59  }
60 
61  TosaSerializationBasicBlock* basicBlock = GetTosaMapping(layer->GetType(),
62  inputs,
63  outputs,
64  layer->GetParameters(),
65  isMain);
66  SetBasicBlockConstantTensorData(layer, basicBlock);
67  return basicBlock;
68 }
TosaSerializationBasicBlock * GetTosaMappingFromLayer(Layer *layer, bool isMain=false)
Copyright (c) 2021 ARM Limited and Contributors.
TosaSerializationBasicBlock * GetTosaMapping(const LayerType type, const std::vector< const TensorInfo *> &inputs, const std::vector< const TensorInfo *> &outputs, const BaseDescriptor &, bool isMain=false)
const std::vector< InputSlot > & GetInputSlots() const
Definition: Layer.hpp:245
Base class for all descriptors.
Definition: Descriptors.hpp:22
TosaSerializationBasicBlock * ConvertAdditionToTosaOperator(const std::vector< const TensorInfo *> &inputs, const std::vector< const TensorInfo *> &outputs, bool isMain)
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
Definition: Layer.hpp:273
const std::vector< OutputSlot > & GetOutputSlots() const
Definition: Layer.hpp:246
virtual const BaseDescriptor & GetParameters() const override
If the layer has a descriptor return it.
Definition: Layer.hpp:365
void SetBasicBlockConstantTensorData(Layer *layer, TosaSerializationBasicBlock *)
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below...
Definition: Types.hpp:468