18 std::vector<uint32_t> coordinates;
20 for (std::size_t i = shape.size() - 1; i < shape.size(); --i)
24 coordinates.insert(coordinates.begin(), index % shape[i]);
26 index = index/shape[i];
37 for (uint32_t i = rank; i > 0; --i)
39 index = index + coordinates[i - 1] * base;
40 base = base * shape[i - 1];
45 template<
typename I,
typename O>
56 std::vector<uint32_t> outputShape(rank);
57 for (uint32_t i = 0; i < rank; ++i)
59 outputShape[i] = inputShape[i] * params.
m_Multiples[i];
68 auto inputValue = inputDecoder.
Get();
70 outputEncoder.
Set(inputValue);
77 std::vector<float> outputData;
78 auto outputNumElements = inputData.size() *
static_cast<uint32_t
>(std::accumulate(begin(params.
m_Multiples),
81 std::multiplies<>()));
82 outputData.reserve(outputNumElements);
84 for (uint32_t outputIndex = 0; outputIndex < outputNumElements; ++outputIndex)
89 std::vector<uint32_t> inputCoordinates;
90 inputCoordinates.reserve(rank);
91 for (uint32_t i = 0; i < rank; ++i)
93 inputCoordinates.push_back(outputCoords[i] % inputShape[i]);
98 outputEncoder[outputIndex];
99 outputEncoder.
Set(inputData[inputIndex]);
104 template void Tile(
const TileDescriptor& params,
105 const TensorInfo& inputInfo,
106 Decoder<float>& inputDecoder,
107 Encoder<float>& outputEncoder);
109 template void Tile(
const TileDescriptor& params,
110 const TensorInfo& inputInfo,
111 Decoder<double_t>& inputDecoder,
112 Encoder<double_t>& outputEncoder);