16 const std::vector<const TensorInfo*>& inputs,
17 const std::vector<const TensorInfo*>& outputs,
23 throw armnn::Exception(
"ConvertStridedSliceToTosaOperator: Ellipses mask not supported.");
27 std::vector<int32_t> begin(stridedSliceDescriptor->
m_Begin);
28 std::vector<int32_t> end(stridedSliceDescriptor->
m_End);
29 std::vector<int32_t> strides(stridedSliceDescriptor->
m_Stride);
31 for (
auto stride : strides)
36 throw armnn::Exception(
"ConvertStridedSliceToTosaOperator: Strides greater than 1 not supported.");
40 std::string inputName = std::string(
"input_");
43 std::string outputName = std::string(
"output0_");
54 std::vector<TosaSerializationTensor*> tensors;
55 std::vector<TosaSerializationOperator *> operators;
58 DType inputDType =
ArmNNToDType(inputs[0]->GetDataType());
63 if(inputName.find(
"input_") != std::string::npos)
65 tensors.push_back(
new TosaSerializationTensor(inputName, inputShape, inputDType, {}));
68 DType outputDType =
ArmNNToDType(outputs[0]->GetDataType());
72 uint32_t inputRank = inputs[0]->GetShape().GetNumDimensions();
73 std::vector<int32_t> a1_size(inputRank);
76 for (uint32_t i = 0; i < inputRank; ++i)
82 if (stridedSliceDescriptor->
m_EndMask & (1 << i))
84 end[i] = inputShape[i];
87 a1_size[i] = end[i] - begin[i];
90 TosaSliceAttribute sliceAttribute(begin, a1_size);
92 auto* sliceOp1 =
new TosaSerializationOperator(Op_SLICE,
93 Attribute_SliceAttribute,
98 tensors.push_back(
new TosaSerializationTensor(outputNameSlice, a1_size, outputDType, {}));
99 operators.push_back(sliceOp1);
102 std::vector<int32_t> newShape;
104 for (uint32_t i = 0; i < inputRank; ++i)
109 newShape.push_back(a1_size[i]);
113 TosaReshapeAttribute reshapeAttribute2(newShape);
115 auto* reshapeOp2 =
new TosaSerializationOperator(Op_RESHAPE,
116 Attribute_ReshapeAttribute,
121 tensors.push_back(
new TosaSerializationTensor(outputName, newShape, outputDType, {}));
122 operators.push_back(reshapeOp2);
126 return new TosaSerializationBasicBlock(blockName,