28 unsigned int numOutputElements = 1;
29 for (
unsigned int i=0; i<outputNumDims; ++i)
31 numOutputElements *= outputDims[i];
34 const unsigned int iNumTensors =
static_cast<unsigned int>(data.
m_Inputs.size());
35 const unsigned int iBatchSize = inputDims[0];
36 const unsigned int iChannels = (inputNumDims > 1) ? inputDims[1] : 1;
37 const unsigned int iHeight = (inputNumDims > 2) ? inputDims[2] : 1;
38 const unsigned int iWidth = (inputNumDims > 3) ? inputDims[3] : 1;
40 const unsigned int oBatchSize = outputDims[1];
41 const unsigned int oChannels = (outputNumDims > 2) ? outputDims[2] : 1;
42 const unsigned int oHeight = (outputNumDims > 3) ? outputDims[3] : 1;
43 const unsigned int oWidth = (outputNumDims > 4) ? outputDims[4] : 1;
50 std::array<unsigned int, 6> iCoordinates{ 0 };
54 std::array<unsigned int *, 5> oCoordinates = { &iCoordinates[5],
61 oCoordinates[axis] = &iCoordinates[0];
64 unsigned int dim_shift = 0;
65 for(
unsigned int dim = 0; dim < inputNumDims; ++dim)
71 oCoordinates[dim + dim_shift] = &iCoordinates[dim + 1];
75 unsigned int &i = iCoordinates[0];
76 unsigned int &bi = iCoordinates[1];
77 unsigned int &ci = iCoordinates[2];
78 unsigned int &hi = iCoordinates[3];
79 unsigned int &wi = iCoordinates[4];
82 unsigned int &o = *(oCoordinates[0]);
83 unsigned int &bo = *(oCoordinates[1]);
84 unsigned int &co = *(oCoordinates[2]);
85 unsigned int &ho = *(oCoordinates[3]);
86 unsigned int &wo = *(oCoordinates[4]);
89 for(; i < iNumTensors; ++(i))
91 for(bi = 0; bi < iBatchSize; ++(bi))
93 for(ci = 0; ci < iChannels; ++(ci))
95 for(hi = 0; hi < iHeight; ++(hi))
97 for(wi = 0; wi < iWidth; ++(wi))
99 output[o * oWidth * oHeight * oChannels * oBatchSize +
100 bo * oWidth * oHeight * oChannels +
101 co * oWidth * oHeight +
105 output.
Set(inputs[i]->Get());
uint32_t m_Axis
0-based axis along which to stack the input tensors.
const TensorShape & GetShape() const
virtual void Set(IType right)=0
const TensorInfo & GetTensorInfo(const ITensorHandle *tensorHandle)
float32 helpers
Copyright (c) 2020 ARM Limited.
LayerDescriptor m_Parameters
void Stack(const StackQueueDescriptor &data, std::vector< std::unique_ptr< Decoder< float >>> &inputs, Encoder< float > &output)
std::vector< ITensorHandle * > m_Outputs
std::vector< ITensorHandle * > m_Inputs
unsigned int GetNumDimensions() const