From ae050524109f1ce827962665436ef7430f2ac479 Mon Sep 17 00:00:00 2001 From: David Monahan Date: Wed, 22 Mar 2023 16:48:58 +0000 Subject: IVGCVSW-7255 Update Doxygen Documentation and publish on GitHub. * Updating Doxygen documentation for 23.02 release. Signed-off-by: David Monahan Change-Id: I545574ff7664b4595d2fe6a91a3c35d2ad55df82 --- 23.02/_elementwise_unary_operator_8hpp.xhtml | 124 ++++++++++++++++++++------- 1 file changed, 94 insertions(+), 30 deletions(-) (limited to '23.02/_elementwise_unary_operator_8hpp.xhtml') diff --git a/23.02/_elementwise_unary_operator_8hpp.xhtml b/23.02/_elementwise_unary_operator_8hpp.xhtml index a7ff8d6c92..a9acf0d7e1 100644 --- a/23.02/_elementwise_unary_operator_8hpp.xhtml +++ b/23.02/_elementwise_unary_operator_8hpp.xhtml @@ -8,7 +8,7 @@ - + ArmNN: src/backends/tosaCommon/operatorMappings/ElementwiseUnaryOperator.hpp File Reference @@ -19,9 +19,6 @@ - @@ -30,7 +27,8 @@ extensions: ["tex2jax.js"], jax: ["input/TeX","output/HTML-CSS"], }); - + + @@ -51,18 +49,21 @@ - + +/* @license-end */
@@ -76,7 +77,9 @@ $(function() {
@@ -108,12 +111,12 @@ $(document).ready(function(){initNavTree('_elementwise_unary_operator_8hpp.xhtml - - + +

Functions

TosaSerializationBasicBlock * ConvertElementwiseUnaryOperator (const Layer *layer, const std::vector< const TensorInfo *> &inputs, const std::vector< const TensorInfo *> &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
 
TosaSerializationBasicBlock * ConvertElementwiseUnaryOperator (const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
 

Function Documentation

- -

◆ ConvertElementwiseUnaryOperator()

+ +

◆ ConvertElementwiseUnaryOperator()

@@ -127,13 +130,13 @@ Functions - const std::vector< const TensorInfo *> &  + const std::vector< const TensorInfo * > &  inputs, - const std::vector< const TensorInfo *> &  + const std::vector< const TensorInfo * > &  outputs, @@ -151,34 +154,95 @@ Functions

Definition at line 8 of file ElementwiseUnaryOperator.cpp.

- +
12 {
+
13  std::string input0Name = std::string("input0_");
+
14  std::string outputName = std::string("output0_");
+
15  std::string blockName = std::string("Op_ELEMENTWISEUNARY_block_") + GetUniqueTosaMappingID();
+
16 
+
17 
+
18  // If a layer is present then the block will be used for execution, so input and output names need to be determined
+
19  // using the previous and following layers so the graph is connected correctly. For validation this doesn't matter.
+
20  if(layer != nullptr)
+
21  {
+
22  // Get the layer connected to the input slot and determine unique the tensor name.
+
23  Layer& connectedLayer0 = layer->GetInputSlot(0).GetConnectedOutputSlot()->GetOwningLayer();
+
24  input0Name = GenerateUniqueName(connectedLayer0, 0);
+
25 
+
26  // Determine unique output tensor name.
+
27  outputName = GenerateUniqueOutputName(*layer, 0);
+
28  }
+
29 
+
30  TosaSerializationOperator* op = nullptr;
+
31  switch(unaryDescriptor->m_Operation)
+
32  {
+
33  case UnaryOperation::Rsqrt:
+
34  {
+
35  op = new TosaSerializationOperator(tosa::Op_RSQRT,
+
36  Attribute_NONE,
+
37  nullptr,
+
38  {input0Name},
+
39  {outputName});
+
40  blockName = std::string("Op_RSQRT_block_") + GetUniqueTosaMappingID();
+
41  break;
+
42  }
+
43  default:
+
44  throw armnn::Exception("ConvertElementwiseUnaryToTosaOperator: Unsupported layer type.");
+
45  }
+
46 
+
47  ARMNN_ASSERT(op != nullptr);
+
48 
+
49  std::vector<TosaSerializationTensor*> tensors;
+
50  // Only add input tensor if connected layer is an input layer.
+
51  // As intermediate or constant tensors will be created separately.
+
52  // There also can't be duplicate tensor.
+
53  if(input0Name.find("input0_") != std::string::npos)
+
54  {
+
55  std::vector<int32_t> inputShape0 = GetTosaTensorShape(inputs[0]->GetShape());
+
56  DType inputDType0 = ArmNNToDType(inputs[0]->GetDataType());
+
57  tensors.push_back(new TosaSerializationTensor(input0Name, inputShape0, inputDType0, {}));
+
58  }
+
59 
+
60  std::vector<int32_t> outputShape0 = GetTosaTensorShape(outputs[0]->GetShape());
+
61  DType outputDType0 = ArmNNToDType(outputs[0]->GetDataType());
+
62 
+
63  tensors.push_back(new TosaSerializationTensor(outputName, outputShape0, outputDType0, {}));
+
64 
+
65  // operatorInputNames/operatorOutputNames ends up being the same as
+
66  // blockInputNames/blockOutputNames for one-to-one ArmNN to Tosa mappings
+
67  return new TosaSerializationBasicBlock(blockName, // name
+
68  {op}, // operators
+
69  tensors, // tensors
+
70  {input0Name}, // inputs
+
71  {outputName}); // outputs
+
72 }
+

References ARMNN_ASSERT, GenerateUniqueName(), GenerateUniqueOutputName(), InputSlot::GetConnectedOutputSlot(), Layer::GetInputSlot(), OutputSlot::GetOwningLayer(), GetTosaTensorShape(), GetUniqueTosaMappingID(), and ElementwiseUnaryDescriptor::m_Operation.

Referenced by GetTosaMapping().

-
12 {
13  std::string input0Name = std::string("input0_");
14  std::string outputName = std::string("output0_");
15  std::string blockName = std::string("Op_ELEMENTWISEUNARY_block_") + GetUniqueTosaMappingID();
16 
17 
18  // If a layer is present then the block will be used for execution, so input and output names need to be determined
19  // using the previous and following layers so the graph is connected correctly. For validation this doesn't matter.
20  if(layer != nullptr)
21  {
22  // Get the layer connected to the input slot and determine unique the tensor name.
23  Layer& connectedLayer0 = layer->GetInputSlot(0).GetConnectedOutputSlot()->GetOwningLayer();
24  input0Name = GenerateUniqueName(connectedLayer0, 0);
25 
26  // Determine unique output tensor name.
27  outputName = GenerateUniqueOutputName(*layer, 0);
28  }
29 
30  TosaSerializationOperator* op = nullptr;
31  switch(unaryDescriptor->m_Operation)
32  {
33  case UnaryOperation::Rsqrt:
34  {
35  op = new TosaSerializationOperator(tosa::Op_RSQRT,
36  Attribute_NONE,
37  nullptr,
38  {input0Name},
39  {outputName});
40  blockName = std::string("Op_RSQRT_block_") + GetUniqueTosaMappingID();
41  break;
42  }
43  default:
44  throw armnn::Exception("ConvertElementwiseUnaryToTosaOperator: Unsupported layer type.");
45  }
46 
47  ARMNN_ASSERT(op != nullptr);
48 
49  std::vector<TosaSerializationTensor*> tensors;
50  // Only add input tensor if connected layer is an input layer.
51  // As intermediate or constant tensors will be created separately.
52  // There also can't be duplicate tensor.
53  if(input0Name.find("input0_") != std::string::npos)
54  {
55  std::vector<int32_t> inputShape0 = GetTosaTensorShape(inputs[0]->GetShape());
56  DType inputDType0 = ArmNNToDType(inputs[0]->GetDataType());
57  tensors.push_back(new TosaSerializationTensor(input0Name, inputShape0, inputDType0, {}));
58  }
59 
60  std::vector<int32_t> outputShape0 = GetTosaTensorShape(outputs[0]->GetShape());
61  DType outputDType0 = ArmNNToDType(outputs[0]->GetDataType());
62 
63  tensors.push_back(new TosaSerializationTensor(outputName, outputShape0, outputDType0, {}));
64 
65  // operatorInputNames/operatorOutputNames ends up being the same as
66  // blockInputNames/blockOutputNames for one-to-one ArmNN to Tosa mappings
67  return new TosaSerializationBasicBlock(blockName, // name
68  {op}, // operators
69  tensors, // tensors
70  {input0Name}, // inputs
71  {outputName}); // outputs
72 }
std::vector< int32_t > GetTosaTensorShape(const TensorShape &shape)
-
UnaryOperation m_Operation
Specifies the elementwiseUnary operation to execute.
-
Layer & GetOwningLayer() const
Definition: Layer.hpp:119
-
DType ArmNNToDType(const DataType &type)
-
std::string GetUniqueTosaMappingID()
-
std::string GenerateUniqueName(const Layer &layer, uint32_t layerSlot)
-
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
Definition: Layer.hpp:324
-
std::string GenerateUniqueOutputName(const Layer &layer, uint32_t layerSlot)
-
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
-
const OutputSlot * GetConnectedOutputSlot() const
Definition: Layer.hpp:56
-
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:46
- -
+
+
std::string GenerateUniqueOutputName(const Layer &layer, uint32_t layerSlot)
+
Base class for all ArmNN exceptions so that users can filter to just those.
Definition: Exceptions.hpp:46
+
const OutputSlot * GetConnectedOutputSlot() const
Definition: Layer.hpp:56
+ +
std::vector< int32_t > GetTosaTensorShape(const TensorShape &shape)
+
UnaryOperation m_Operation
Specifies the elementwiseUnary operation to execute.
+
std::string GenerateUniqueName(const Layer &layer, uint32_t layerSlot)
+
Layer & GetOwningLayer() const
Definition: Layer.hpp:119
+
DType ArmNNToDType(const DataType &type)
+
const InputSlot & GetInputSlot(unsigned int index) const override
Get a const input slot handle by slot index.
Definition: Layer.hpp:324
+
#define ARMNN_ASSERT(COND)
Definition: Assert.hpp:14
+
std::string GetUniqueTosaMappingID()
-- cgit v1.2.1