24.11
|
Go to the source code of this file.
◆ CreateEmptyTosaSerializationBasicBlock()
| TosaSerializationBasicBlock* CreateEmptyTosaSerializationBasicBlock |
( |
| ) |
|
Definition at line 11 of file TosaMappings.cpp.
14 auto* op =
new TosaSerializationOperator(Op_UNKNOWN, Attribute_NONE,
nullptr, {}, {});
15 return new TosaSerializationBasicBlock(
"",
"", {op}, {}, {}, {});
Referenced by GetTosaMapping().
◆ GetTosaMapping()
Definition at line 18 of file TosaMappings.cpp.
28 auto activationDesc = PolymorphicDowncast<const ActivationDescriptor*>(&descriptor);
29 switch (activationDesc->m_Function)
31 case ActivationFunction::LeakyReLu:
35 case ActivationFunction::ReLu:
36 case ActivationFunction::BoundedReLu:
40 case ActivationFunction::Gelu:
44 case ActivationFunction::HardSwish:
48 case ActivationFunction::Sigmoid:
52 case ActivationFunction::TanH:
62 case LayerType::Addition:
63 case LayerType::Multiplication:
64 case LayerType::Subtraction:
68 case LayerType::ElementwiseBinary:
70 auto binaryDesc = PolymorphicDowncast<const ElementwiseBinaryDescriptor*>(&descriptor);
71 switch (binaryDesc->m_Operation)
73 case BinaryOperation::SqDiff:
79 case LayerType::ElementwiseUnary:
81 auto unaryDesc = PolymorphicDowncast<const ElementwiseUnaryDescriptor*>(&descriptor);
82 switch(unaryDesc->m_Operation)
84 case UnaryOperation::Rsqrt:
88 case UnaryOperation::Exp:
92 case UnaryOperation::Log:
102 case LayerType::BatchMatMul:
104 auto batchMatMulDesc = PolymorphicDowncast<const BatchMatMulDescriptor*>(&descriptor);
107 case LayerType::Concat:
109 auto concatDesc = PolymorphicDowncast<const OriginsDescriptor*>(&descriptor);
112 case LayerType::Constant:
114 bool isDepthwiseConv2dWeights =
false;
121 if(type == LayerType::DepthwiseConvolution2d && slotIdx == 1)
123 isDepthwiseConv2dWeights =
true;
128 case LayerType::Convolution2d:
130 auto conv2dDesc = PolymorphicDowncast<const Convolution2dDescriptor*>(&descriptor);
133 case LayerType::Convolution3d:
135 auto conv3dDesc = PolymorphicDowncast<const Convolution3dDescriptor*>(&descriptor);
138 case LayerType::DepthwiseConvolution2d:
140 auto conv2dDesc = PolymorphicDowncast<const DepthwiseConvolution2dDescriptor*>(&descriptor);
145 auto desc = PolymorphicDowncast<const DepthToSpaceDescriptor*>(&descriptor);
150 auto fullyConnectedDesc = PolymorphicDowncast<const FullyConnectedDescriptor*>(&descriptor);
155 auto gatherDesc = PolymorphicDowncast<const GatherDescriptor*>(&descriptor);
160 auto padDesc = PolymorphicDowncast<const PadDescriptor*>(&descriptor);
165 auto poolDesc = PolymorphicDowncast<const Pooling2dDescriptor*>(&descriptor);
167 bool avgPoolIgnoreValue =
168 (poolDesc->m_PoolType == PoolingAlgorithm::Average) &&
169 (poolDesc->m_PaddingMethod == PaddingMethod::IgnoreValue);
171 if (poolDesc->m_PoolType == PoolingAlgorithm::L2)
175 else if (avgPoolIgnoreValue)
184 case LayerType::Mean:
186 auto meanDesc = PolymorphicDowncast<const MeanDescriptor*>(&descriptor);
190 reduceDesc.
m_vAxis = meanDesc->m_Axis;
205 auto reduceDesc = PolymorphicDowncast<const ReduceDescriptor*>(&descriptor);
208 case LayerType::Reshape:
210 auto reshapeDesc = PolymorphicDowncast<const ReshapeDescriptor*>(&descriptor);
215 auto resizeDesc = PolymorphicDowncast<const ResizeDescriptor*>(&descriptor);
220 auto sliceDesc = PolymorphicDowncast<const SliceDescriptor*>(&descriptor);
225 auto softmaxDesc = PolymorphicDowncast<const SoftmaxDescriptor*>(&descriptor);
230 auto splitDesc = PolymorphicDowncast<const SplitterDescriptor*>(&descriptor);
235 auto stackDesc = PolymorphicDowncast<const StackDescriptor*>(&descriptor);
240 auto sliceDesc = PolymorphicDowncast<const StridedSliceDescriptor*>(&descriptor);
243 case LayerType::TransposeConvolution2d:
245 auto transposeConv2dDesc = PolymorphicDowncast<const TransposeConvolution2dDescriptor*>(&descriptor);
250 auto transposeDesc = PolymorphicDowncast<const TransposeDescriptor*>(&descriptor);
References armnn::Activation, armnn::Addition, armnn::Average, armnn::BatchMatMul, armnn::BoundedReLu, armnn::Concat, armnn::Constant, ConvertAvgPool2DIgnoreValueToTosaOperator(), ConvertBatchMatMulToTosaOperator(), ConvertConcatToTosaOperator(), ConvertConstantToTosaOperator(), ConvertConv2dToTosaOperator(), ConvertConv3dToTosaOperator(), ConvertDepthToSpaceToTosaOperator(), ConvertDepthwiseConv2dToTosaOperator(), ConvertDequantizeToTosaOperator(), ConvertElementwiseBinaryToTosaOperator(), ConvertExpOperator(), ConvertFullyConnectedToTosaOperator(), ConvertGatherToTosaOperator(), ConvertGeluToTosaOperator(), ConvertHardSwishToTosaOperator(), ConvertLeakyReluToTosaOperator(), ConvertLogOperator(), ConvertPadToTosaOperator(), ConvertPooling2DToTosaOperator(), ConvertQuantizeToTosaOperator(), ConvertReduceToTosaOperator(), ConvertReluToTosaOperator(), ConvertReshapeToTosaOperator(), ConvertResizeToTosaOperator(), ConvertRsqrtOperator(), ConvertSigmoidToTosaOperator(), ConvertSliceToTosaOperator(), ConvertSoftmaxToTosaOperator(), ConvertSplitToTosaOperator(), ConvertSquaredDifferenceToTosaOperator(), ConvertStackToTosaOperator(), ConvertStridedSliceToTosaOperator(), ConvertTanHToTosaOperator(), ConvertTransposeConv2dToTosaOperator(), ConvertTransposeToTosaOperator(), armnn::Convolution2d, armnn::Convolution3d, CreateEmptyTosaSerializationBasicBlock(), armnn::DepthToSpace, armnn::DepthwiseConvolution2d, armnn::Dequantize, armnn::ElementwiseBinary, armnn::ElementwiseUnary, armnn::Exp, armnn::FullyConnected, armnn::Gather, armnn::Gelu, OutputSlot::GetConnection(), Layer::GetOutputSlot(), InputSlot::GetOwningLayer(), InputSlot::GetSlotIndex(), Layer::GetType(), armnn::HardSwish, armnn::IgnoreValue, armnn::L2, armnn::LeakyReLu, armnn::Log, ReduceDescriptor::m_KeepDims, ReduceDescriptor::m_ReduceOperation, ReduceDescriptor::m_vAxis, armnn::Mean, armnn::Multiplication, armnn::Pad, armnn::Pooling2d, armnn::Quantize, armnn::Reduce, armnn::ReLu, armnn::Reshape, armnn::Resize, armnn::Rsqrt, armnn::Sigmoid, armnn::Slice, armnn::Softmax, armnn::Splitter, armnn::SqDiff, armnn::Stack, armnn::StridedSlice, armnn::Subtraction, armnn::TanH, armnn::Transpose, and armnn::TransposeConvolution2d.
Referenced by GetTosaMappingFromLayer(), and TosaRefLayerSupport::IsLayerSupported().
◆ GetTosaMappingFromLayer()
| TosaSerializationBasicBlock* GetTosaMappingFromLayer |
( |
const Layer * |
layer | ) |
|
void Transpose(const armnn::TensorShape &dstShape, const armnn::PermutationVector &mappings, const void *src, void *dst, size_t dataTypeSize)
TosaSerializationBasicBlock * ConvertGeluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * CreateEmptyTosaSerializationBasicBlock()
TosaSerializationBasicBlock * ConvertReshapeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ReshapeDescriptor *reshapeDescriptor)
TosaSerializationBasicBlock * ConvertRsqrtOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
void Splitter(const SplitterQueueDescriptor &data, std::vector< ITensorHandle * > inputs, std::vector< ITensorHandle * > outputs)
TosaSerializationBasicBlock * ConvertElementwiseBinaryToTosaOperator(const Layer *layer, const LayerType type, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseBinaryDescriptor *descriptor)
void Pooling2d(Decoder< float > &rInputDecoder, Encoder< float > &rOutputEncoder, const TensorInfo &inputInfo, const TensorInfo &outputInfo, const Pooling2dDescriptor ¶ms)
Computes the Pooling2d operation.
TosaSerializationBasicBlock * ConvertAvgPool2DIgnoreValueToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Pooling2dDescriptor *poolDescriptor)
TosaSerializationBasicBlock * ConvertConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Convolution2dDescriptor *conv2dDescriptor)
void Reduce(const TensorInfo &inputInfo, const TensorInfo &outputInfo, Decoder< float > &input, Encoder< float > &output, const std::vector< uint32_t > axis, const ReduceOperation reduceOperation)
TosaSerializationBasicBlock * ConvertPooling2DToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Pooling2dDescriptor *poolDescriptor)
const OutputSlot & GetOutputSlot(unsigned int index=0) const override
Get the const output slot handle by slot index.
TosaSerializationBasicBlock * ConvertConcatToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const OriginsDescriptor *concatDescriptor)
const std::vector< InputSlot > & GetInputSlots() const
void Stack(const StackQueueDescriptor &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output, const TensorInfo &inputInfo, const TensorInfo &outputInfo)
void FullyConnected(const TensorShape &rInputShape, Decoder< float > &rInputDecoder, const TensorShape &rOutputShape, Encoder< float > &rOutputEncoder, const TensorShape &rWeightsShape, Decoder< float > &rWeightDecoder, Decoder< float > *pBiasDecoder, const bool biasEnabled, const unsigned int K, const bool transposeWeights)
Performs a matrix multiplication and optionally adds a bias.
TosaSerializationBasicBlock * ConvertSquaredDifferenceToTosaOperator(const Layer *layer, const LayerType, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseBinaryDescriptor *descriptor)
ReduceOperation m_ReduceOperation
Specifies the reduction operation to execute.
TosaSerializationBasicBlock * ConvertSplitToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SplitterDescriptor *splitDescriptor)
TosaSerializationBasicBlock * ConvertPadToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const PadDescriptor *padDescriptor)
TosaSerializationBasicBlock * ConvertStackToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const StackDescriptor *stackDescriptor)
TosaSerializationBasicBlock * ConvertDequantizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs)
void Gather(const TensorInfo ¶msInfo, const TensorInfo &indicesInfo, const TensorInfo &outputInfo, Decoder< I > ¶ms, const int32_t *indices, Encoder< O > &output, const int32_t axis_int)
TosaSerializationBasicBlock * ConvertGatherToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const GatherDescriptor *gatherDescriptor)
void Slice(const TensorInfo &inputInfo, const SliceDescriptor &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)
TosaSerializationBasicBlock * ConvertSliceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SliceDescriptor *sliceDescriptor)
TosaSerializationBasicBlock * ConvertReluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertDepthToSpaceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const DepthToSpaceDescriptor *descriptor)
float Dequantize(QuantizedType value, float scale, int32_t offset)
Dequantize an 8-bit data type into a floating point data type.
QuantizedType Quantize(float value, float scale, int32_t offset)
Quantize a floating point data type into an 8-bit data type.
TosaSerializationBasicBlock * ConvertSigmoidToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
void Softmax(Decoder< float > &in, Encoder< float > &out, const TensorInfo &inputTensorInfo, float beta, int axis)
Computes the softmax function on some inputs, into outputs, with a shape given by tensorInfo.
TosaSerializationBasicBlock * ConvertLeakyReluToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *activationDescriptor)
const std::vector< OutputSlot > & GetOutputSlots() const
TosaSerializationBasicBlock * GetTosaMapping(const Layer *layer, const LayerType type, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const BaseDescriptor &descriptor)
TosaSerializationBasicBlock * ConvertTransposeConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const TransposeConvolution2dDescriptor *descriptor)
bool m_KeepDims
if true then output shape has no change.
virtual const BaseDescriptor & GetParameters() const override
If the layer has a descriptor return it.
void Pad(const TensorInfo &inputInfo, const TensorInfo &outputInfo, const ITensorHandle *inputHandle, ITensorHandle *outputHandle, const PadQueueDescriptor &data)
TosaSerializationBasicBlock * ConvertTanHToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertQuantizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs)
TosaSerializationBasicBlock * ConvertReduceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ReduceDescriptor *reduceDescriptor)
LayerType GetType() const override
Returns the armnn::LayerType of this layer.
void Resize(Decoder< float > &in, const TensorInfo &inputInfo, Encoder< float > &out, const TensorInfo &outputInfo, DataLayoutIndexed dataLayout, ResizeMethod resizeMethod, bool alignCorners, bool halfPixelCenters)
TosaSerializationBasicBlock * ConvertConstantToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &outputs, bool isDepthwiseConv2dWeights=false)
std::vector< uint32_t > m_vAxis
The indices of the dimensions to reduce.
TosaSerializationBasicBlock * ConvertDepthwiseConv2dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const DepthwiseConvolution2dDescriptor *conv2dDescriptor)
TosaSerializationBasicBlock * ConvertFullyConnectedToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const FullyConnectedDescriptor *fcDescriptor)
TosaSerializationBasicBlock * ConvertConv3dToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const Convolution3dDescriptor *conv3dDescriptor)
void DepthToSpace(const TensorInfo &inputInfo, const DepthToSpaceDescriptor &descriptor, const void *inputData, void *outputData, unsigned int dataTypeSize)
void StridedSlice(const TensorInfo &inputInfo, const StridedSliceDescriptor ¶ms, const void *inputData, void *outputData, unsigned int dataTypeSize)
TosaSerializationBasicBlock * ConvertResizeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ResizeDescriptor *resizeDescriptor)
TosaSerializationBasicBlock * ConvertSoftmaxToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const SoftmaxDescriptor *softmaxDescriptor)
TosaSerializationBasicBlock * ConvertTransposeToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const TransposeDescriptor *transposeDescriptor)
TosaSerializationBasicBlock * ConvertLogOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
float Activation(float in, ActivationFunction function, float a, float b)
A ReduceDescriptor for the REDUCE operators.
LayerType
When adding a new layer, adapt also the LastLayer enum value in the enum class LayerType below.
const InputSlot * GetConnection(unsigned int index) const override
TosaSerializationBasicBlock * ConvertExpOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ElementwiseUnaryDescriptor *unaryDescriptor)
TosaSerializationBasicBlock * ConvertBatchMatMulToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const BatchMatMulDescriptor *descriptor)
TosaSerializationBasicBlock * ConvertHardSwishToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const ActivationDescriptor *desc)
TosaSerializationBasicBlock * ConvertStridedSliceToTosaOperator(const Layer *layer, const std::vector< const TensorInfo * > &inputs, const std::vector< const TensorInfo * > &outputs, const StridedSliceDescriptor *stridedSliceDescriptor)