6 #include <fmt/format.h>
30 std::unique_ptr<Decoder<float>> params_decoderPtr = MakeDecoder<float>(inputInfo0, inputs[0]->
Map());
32 const int32_t* indicesDataPtr =
reinterpret_cast<int32_t*
>(inputs[1]->Map());
33 std::vector<int32_t> indices(indicesDataPtr, indicesDataPtr + inputInfo1.
GetNumElements());
43 std::unique_ptr<Encoder<float>> output_encoderPtr = MakeEncoder<float>(outputInfo, outputs[0]->
Map());
50 TensorShape paramsShape = inputInfo0.
GetShape();
51 std::vector<unsigned int> flattenedCoeff(keyIndices[
"ND"], 1);
52 for (
unsigned int i = 1; i < keyIndices[
"ND"]; ++i)
54 flattenedCoeff[i-1] = paramsShape[i];
56 for (
unsigned int i = keyIndices[
"ND"]-1; i > 0; --i)
58 flattenedCoeff[i-1] *= flattenedCoeff[i];
64 flattenedIndices_Info.
SetShape({ keyIndices[
"W"] });
65 std::vector<int32_t> flattenedIndices(flattenedIndices_Info.
GetNumElements(), 0);
68 for (
unsigned int i = 0; i < keyIndices[
"W"]; ++i)
70 for (
unsigned int j = 0; j < keyIndices[
"ND"]; ++j)
72 flattenedIndices[i] += indices[i * keyIndices[
"ND"] + j] *
static_cast<int32_t
>(flattenedCoeff[j]);
79 params_K_C_Info.
SetShape({ keyIndices[
"K"], keyIndices[
"C"] });
83 indices_N_W_Info.
SetShape({ keyIndices[
"N"], keyIndices[
"W"] });
88 outputGather_Info.
SetShape({ keyIndices[
"N"], keyIndices[
"W"], keyIndices[
"C"] });
91 Gather(params_K_C_Info, indices_N_W_Info, outputGather_Info,
92 *params_decoderPtr, flattenedIndices.data(), *output_encoderPtr, 0);
#define ARMNN_SCOPED_PROFILING_EVENT_REF_NAME_GUID(label)
Creates a profiling event that uses GetGuid() and GetName() from the calling class.
void Execute() const override
unsigned int GetNumElements() const
const TensorShape & GetShape() const
void SetShape(const TensorShape &newShape)
Copyright (c) 2021 ARM Limited and Contributors.
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)
const TensorInfo & GetTensorInfo(const ITensorHandle *tensorHandle)
float32 helpers
std::map< std::string, unsigned int > CalculateGatherNdKeyIndices(TensorInfo inputInfo0, TensorInfo inputInfo1)
Calculates the key index values needed for GatherNd: N, ND, K, W, C (N is always 1)
std::vector< ITensorHandle * > m_Inputs
std::vector< ITensorHandle * > m_Outputs