16 using namespace armcomputetensorutils;
24 const arm_compute::TensorInfo aclInputInfo = BuildArmComputeTensorInfo(input);
25 const arm_compute::TensorInfo aclPreviousCellStateInInfo = BuildArmComputeTensorInfo(previousCellStateIn);
26 const arm_compute::TensorInfo aclPreviousOutputInInfo = BuildArmComputeTensorInfo(previousOutputIn);
29 const arm_compute::TensorInfo aclCellStateOutInfo = BuildArmComputeTensorInfo(cellStateOut);
30 const arm_compute::TensorInfo aclOutputInfo = BuildArmComputeTensorInfo(output);
33 const arm_compute::TensorInfo aclInputToInputWeightsInfo
35 const arm_compute::TensorInfo aclInputToForgetWeightsInfo
37 const arm_compute::TensorInfo aclInputToCellWeightsInfo
39 const arm_compute::TensorInfo aclInputToOutputWeightsInfo
41 const arm_compute::TensorInfo aclRecurrentToInputWeightsInfo
43 const arm_compute::TensorInfo aclRecurrentToForgetWeightsInfo
45 const arm_compute::TensorInfo aclRecurrentToCellWeightsInfo
47 const arm_compute::TensorInfo aclRecurrentToOutputWeightsInfo
49 const arm_compute::TensorInfo aclInputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.
GetInputGateBias());
50 const arm_compute::TensorInfo aclForgetGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.
GetForgetGateBias());
51 const arm_compute::TensorInfo aclCellBiasInfo = BuildArmComputeTensorInfo(paramsInfo.
GetCellBias());
52 const arm_compute::TensorInfo aclOutputGateBiasInfo = BuildArmComputeTensorInfo(paramsInfo.
GetOutputGateBias());
54 return arm_compute::CLLSTMLayerQuantized::validate(&aclInputInfo, &aclInputToInputWeightsInfo,
55 &aclInputToForgetWeightsInfo, &aclInputToCellWeightsInfo,
56 &aclInputToOutputWeightsInfo, &aclRecurrentToInputWeightsInfo,
57 &aclRecurrentToForgetWeightsInfo, &aclRecurrentToCellWeightsInfo,
58 &aclRecurrentToOutputWeightsInfo, &aclInputGateBiasInfo,
59 &aclForgetGateBiasInfo, &aclCellBiasInfo, &aclOutputGateBiasInfo,
60 &aclPreviousCellStateInInfo, &aclPreviousOutputInInfo,
61 &aclCellStateOutInfo, &aclOutputInfo);
68 m_InputToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
71 m_InputToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
74 m_InputToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
77 m_InputToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
80 m_RecurrentToInputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
83 m_RecurrentToForgetWeightsTensor = std::make_unique<arm_compute::CLTensor>();
86 m_RecurrentToCellWeightsTensor = std::make_unique<arm_compute::CLTensor>();
89 m_RecurrentToOutputWeightsTensor = std::make_unique<arm_compute::CLTensor>();
92 m_InputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
95 m_ForgetGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
98 m_CellBiasTensor = std::make_unique<arm_compute::CLTensor>();
101 m_OutputGateBiasTensor = std::make_unique<arm_compute::CLTensor>();
111 m_QuantizedLstmLayer.configure(&inputTensor, m_InputToInputWeightsTensor.get(), m_InputToForgetWeightsTensor.get(),
112 m_InputToCellWeightsTensor.get(), m_InputToOutputWeightsTensor.get(),
113 m_RecurrentToInputWeightsTensor.get(), m_RecurrentToForgetWeightsTensor.get(),
114 m_RecurrentToCellWeightsTensor.get(), m_RecurrentToOutputWeightsTensor.get(),
115 m_InputGateBiasTensor.get(), m_ForgetGateBiasTensor.get(), m_CellBiasTensor.get(),
116 m_OutputGateBiasTensor.get(), &cellStateInTensor, &outputStateInTensor,
117 &cellStateOutTensor, &outputStateOutTensor);
132 m_QuantizedLstmLayer.prepare();
142 void ClQuantizedLstmWorkload::FreeUnusedTensors()
144 FreeTensorIfUnused(m_InputToInputWeightsTensor);
145 FreeTensorIfUnused(m_InputToForgetWeightsTensor);
146 FreeTensorIfUnused(m_InputToCellWeightsTensor);
147 FreeTensorIfUnused(m_InputToOutputWeightsTensor);
148 FreeTensorIfUnused(m_RecurrentToInputWeightsTensor);
149 FreeTensorIfUnused(m_RecurrentToForgetWeightsTensor);
150 FreeTensorIfUnused(m_RecurrentToCellWeightsTensor);
151 FreeTensorIfUnused(m_RecurrentToOutputWeightsTensor);
152 FreeTensorIfUnused(m_InputGateBiasTensor);
153 FreeTensorIfUnused(m_ForgetGateBiasTensor);
154 FreeTensorIfUnused(m_CellBiasTensor);
155 FreeTensorIfUnused(m_OutputGateBiasTensor);
const ConstCpuTensorHandle * m_RecurrentToForgetWeights
const ConstCpuTensorHandle * m_InputGateBias
void InitializeArmComputeClTensorData(arm_compute::CLTensor &clTensor, const ConstCpuTensorHandle *handle)
#define ARMNN_SCOPED_PROFILING_EVENT_CL(name)
void RunClFunction(arm_compute::IFunction &function, const CheckLocation &location)
const ConstCpuTensorHandle * m_InputToCellWeights
const QuantizedLstmQueueDescriptor m_Data
Copyright (c) 2020 ARM Limited.
ClQuantizedLstmWorkload(const QuantizedLstmQueueDescriptor &descriptor, const WorkloadInfo &info)
const ConstCpuTensorHandle * m_ForgetGateBias
const ConstCpuTensorHandle * m_RecurrentToInputWeights
const ConstCpuTensorHandle * m_RecurrentToCellWeights
const ConstCpuTensorHandle * m_RecurrentToOutputWeights
const ConstCpuTensorHandle * m_CellBias
std::vector< ITensorHandle * > m_Outputs
void Execute() const override
const ConstCpuTensorHandle * m_OutputGateBias
Contains information about inputs and outputs to a layer.
const ConstCpuTensorHandle * m_InputToForgetWeights
std::vector< ITensorHandle * > m_Inputs
const ConstCpuTensorHandle * m_InputToOutputWeights
const ConstCpuTensorHandle * m_InputToInputWeights
const TensorInfo & GetTensorInfo() const
arm_compute::Status ClQuantizedLstmWorkloadValidate(const TensorInfo &input, const TensorInfo &previousCellStateIn, const TensorInfo &previousOutputIn, const TensorInfo &cellStateOut, const TensorInfo &output, const QuantizedLstmInputParamsInfo ¶msInfo)