32 for (
unsigned int inputIdx=0; inputIdx<numInputs; ++inputIdx)
34 for (
unsigned int elmt=0; elmt<inputLength; ++elmt)
36 (*inputs[inputIdx])[elmt];
37 output[(inputIdx * inputLength) + elmt];
38 output.
Set(inputs[inputIdx]->Get());
45 unsigned int numOutputElements = 1;
46 for (
unsigned int i=0; i<outputNumDims; ++i)
48 numOutputElements *= outputDims[i];
51 const unsigned int iNumTensors =
static_cast<unsigned int>(data.
m_Inputs.size());
52 const unsigned int iBatchSize = inputDims[0];
53 const unsigned int iChannels = (inputNumDims > 1) ? inputDims[1] : 1;
54 const unsigned int iHeight = (inputNumDims > 2) ? inputDims[2] : 1;
55 const unsigned int iWidth = (inputNumDims > 3) ? inputDims[3] : 1;
57 const unsigned int oBatchSize = outputDims[1];
58 const unsigned int oChannels = (outputNumDims > 2) ? outputDims[2] : 1;
59 const unsigned int oHeight = (outputNumDims > 3) ? outputDims[3] : 1;
60 const unsigned int oWidth = (outputNumDims > 4) ? outputDims[4] : 1;
67 std::array<unsigned int, 6> iCoordinates{ 0 };
71 std::array<unsigned int *, 5> oCoordinates = { &iCoordinates[5],
78 oCoordinates[axis] = &iCoordinates[0];
81 unsigned int dim_shift = 0;
82 for(
unsigned int dim = 0; dim < inputNumDims; ++dim)
88 oCoordinates[dim + dim_shift] = &iCoordinates[dim + 1];
92 unsigned int &i = iCoordinates[0];
93 unsigned int &bi = iCoordinates[1];
94 unsigned int &ci = iCoordinates[2];
95 unsigned int &hi = iCoordinates[3];
96 unsigned int &wi = iCoordinates[4];
99 unsigned int &o = *(oCoordinates[0]);
100 unsigned int &bo = *(oCoordinates[1]);
101 unsigned int &co = *(oCoordinates[2]);
102 unsigned int &ho = *(oCoordinates[3]);
103 unsigned int &wo = *(oCoordinates[4]);
106 for(; i < iNumTensors; ++(i))
108 for(bi = 0; bi < iBatchSize; ++(bi))
110 for(ci = 0; ci < iChannels; ++(ci))
112 for(hi = 0; hi < iHeight; ++(hi))
114 for(wi = 0; wi < iWidth; ++(wi))
116 output[o * oWidth * oHeight * oChannels * oBatchSize +
117 bo * oWidth * oHeight * oChannels +
118 co * oWidth * oHeight +
122 output.
Set(inputs[i]->Get());
uint32_t m_Axis
0-based axis along which to stack the input tensors.
const TensorShape & GetShape() const
void Stack(const StackQueueDescriptor &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output, const TensorInfo &inputInfo, const TensorInfo &outputInfo)
virtual void Set(IType right)=0
Copyright (c) 2021 ARM Limited and Contributors.
LayerDescriptor m_Parameters
uint32_t m_NumInputs
Number of input tensors.
std::vector< ITensorHandle * > m_Inputs
unsigned int GetNumDimensions() const
unsigned int GetNumElements() const