3135 const std::string descriptorName{
"QuantizedLstmQueueDescriptor"};
3138 ValidateNumInputs(workloadInfo, descriptorName, 3);
3139 ValidateNumOutputs(workloadInfo, descriptorName, 2);
3149 std::vector<DataType> inputOutputSupportedTypes =
3154 std::vector<DataType> cellStateSupportedTypes =
3159 std::vector<DataType> weightsSupportedTypes =
3164 std::vector<DataType> biasSupportedTypes =
3170 ValidateDataTypes(inputInfo, inputOutputSupportedTypes, descriptorName);
3171 ValidateDataTypes(cellStateInInfo, cellStateSupportedTypes, descriptorName);
3172 ValidateDataTypes(outputStateInInfo, inputOutputSupportedTypes, descriptorName);
3174 ValidateDataTypes(cellStateOutInfo, cellStateSupportedTypes, descriptorName);
3175 ValidateDataTypes(outputStateOutInfo, inputOutputSupportedTypes, descriptorName);
3178 ValidateTensorDataTypesMatch(inputInfo, outputStateInInfo, descriptorName,
"input",
"outputStateIn");
3179 ValidateTensorDataTypesMatch(outputStateInInfo, outputStateOutInfo, descriptorName,
3180 "outputStateIn",
"outputStateOut");
3181 ValidateTensorDataTypesMatch(cellStateInInfo, cellStateOutInfo, descriptorName,
"cellStateIn",
"cellStateOut");
3184 ValidateTensorQuantizationSpace(inputInfo, outputStateInInfo, descriptorName,
"input",
"outputStateIn");
3185 ValidateTensorQuantizationSpace(inputInfo, outputStateOutInfo, descriptorName,
"input",
"outputStateOut");
3186 ValidateTensorQuantizationSpace(cellStateInInfo, cellStateOutInfo, descriptorName,
"cellStateIn",
"cellStateOut");
3189 const uint32_t numBatches = inputInfo.GetShape()[0];
3190 const uint32_t inputSize = inputInfo.GetShape()[1];
3191 const uint32_t outputSize = cellStateInInfo.GetShape()[1];
3194 ValidateTensorNumDimNumElem(inputInfo, 2, (numBatches * inputSize), descriptorName +
" input");
3195 ValidateTensorNumDimNumElem(cellStateInInfo, 2, (numBatches * outputSize), descriptorName +
" cellStateIn");
3196 ValidateTensorNumDimNumElem(outputStateInInfo, 2, (numBatches * outputSize), descriptorName +
" outputStateIn");
3197 ValidateTensorNumDimNumElem(cellStateOutInfo, 2, (numBatches * outputSize), descriptorName +
" cellStateOut");
3198 ValidateTensorNumDimNumElem(outputStateOutInfo, 2, (numBatches * outputSize), descriptorName +
" outputStateOut");
3203 ValidateTensorNumDimNumElem(inputToInputWeightsInfo, 2, (outputSize * inputSize),
" InputToInputWeights");
3207 ValidateTensorNumDimNumElem(inputToForgetWeightsInfo, 2, (outputSize * inputSize),
" InputToForgetWeights");
3211 ValidateTensorNumDimNumElem(inputToCellWeightsInfo, 2, (outputSize * inputSize),
" InputToCellWeights");
3215 ValidateTensorNumDimNumElem(inputToOutputWeightsInfo, 2, (outputSize * inputSize),
" InputToOutputWeights");
3219 ValidateTensorNumDimNumElem(recurrentToInputWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToInputWeights");
3223 ValidateTensorNumDimNumElem(recurrentToForgetWeightsInfo, 2, (outputSize * outputSize),
3224 " RecurrentToForgetWeights");
3228 ValidateTensorNumDimNumElem(recurrentToCellWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToCellWeights");
3232 ValidateTensorNumDimNumElem(recurrentToOutputWeightsInfo, 2, (outputSize * outputSize),
" RecurrentToCellWeights");
3235 ValidateDataTypes(inputToInputWeightsInfo, weightsSupportedTypes, descriptorName);
3237 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToForgetWeightsInfo, descriptorName,
3238 "inputToInputWeights",
"inputToForgetWeights");
3239 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToCellWeightsInfo, descriptorName,
3240 "inputToInputWeights",
"inputToCellWeights");
3241 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, inputToOutputWeightsInfo, descriptorName,
3242 "inputToInputWeights",
"inputToOutputWeights");
3244 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToInputWeightsInfo, descriptorName,
3245 "inputToInputWeights",
"recurrentToInputWeights");
3246 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToForgetWeightsInfo, descriptorName,
3247 "inputToInputWeights",
"recurrentToForgeteights");
3248 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToCellWeightsInfo, descriptorName,
3249 "inputToInputWeights",
"recurrentToCellWeights");
3250 ValidateTensorDataTypesMatch(inputToInputWeightsInfo, recurrentToOutputWeightsInfo, descriptorName,
3251 "inputToInputWeights",
"recurrentToOutputWeights");
3254 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToForgetWeightsInfo,
3255 descriptorName,
"inputToInputWeights",
"inputToForgetWeights");
3256 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToCellWeightsInfo,
3257 descriptorName,
"inputToInputWeights",
"inputToCellWeights");
3258 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, inputToOutputWeightsInfo,
3259 descriptorName,
"inputToInputWeights",
"inputToOutputWeights");
3261 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToInputWeightsInfo,
3262 descriptorName,
"inputToInputWeights",
"recurrentToInputWeights");
3263 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToForgetWeightsInfo,
3264 descriptorName,
"inputToInputWeights",
"recurrentToForgetWeights");
3265 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToCellWeightsInfo,
3266 descriptorName,
"inputToInputWeights",
"recurrentToCellWeights");
3267 ValidateTensorQuantizationSpace(inputToInputWeightsInfo, recurrentToOutputWeightsInfo,
3268 descriptorName,
"inputToInputWeights",
"recurrentToOutputWeights");
3273 ValidateTensorNumDimNumElem(inputGateBiasInfo, 1, outputSize,
" InputGateBias");
3277 ValidateTensorNumDimNumElem(forgetGateBiasInfo, 1, outputSize,
" ForgetGateBias");
3279 ValidatePointer(
m_CellBias, descriptorName,
"CellBias");
3281 ValidateTensorNumDimNumElem(cellBiasInfo, 1, outputSize,
" CellBias");
3285 ValidateTensorNumDimNumElem(outputGateBiasInfo, 1, outputSize,
" OutputGateBias");
3288 ValidateDataTypes(inputGateBiasInfo, biasSupportedTypes, descriptorName);
3290 ValidateTensorDataTypesMatch(inputGateBiasInfo, forgetGateBiasInfo, descriptorName,
3291 "inputGateBias",
"forgetGateBias");
3292 ValidateTensorDataTypesMatch(inputGateBiasInfo, cellBiasInfo, descriptorName,
3293 "inputGateBias",
"cellBias");
3294 ValidateTensorDataTypesMatch(inputGateBiasInfo, outputGateBiasInfo, descriptorName,
3295 "inputGateBias",
"outputGateBias");
3298 ValidateBiasTensorQuantization(inputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3299 ValidateBiasTensorQuantization(forgetGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3300 ValidateBiasTensorQuantization(cellBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
3301 ValidateBiasTensorQuantization(outputGateBiasInfo, inputInfo, inputToInputWeightsInfo, descriptorName);
const ConstCpuTensorHandle * m_RecurrentToForgetWeights
const ConstCpuTensorHandle * m_InputGateBias
const ConstCpuTensorHandle * m_InputToCellWeights
std::vector< TensorInfo > m_InputTensorInfos
const ConstCpuTensorHandle * m_ForgetGateBias
const ConstCpuTensorHandle * m_RecurrentToInputWeights
std::vector< TensorInfo > m_OutputTensorInfos
const ConstCpuTensorHandle * m_RecurrentToCellWeights
const ConstCpuTensorHandle * m_RecurrentToOutputWeights
const ConstCpuTensorHandle * m_CellBias
const ConstCpuTensorHandle * m_OutputGateBias
const ConstCpuTensorHandle * m_InputToForgetWeights
const ConstCpuTensorHandle * m_InputToOutputWeights
const ConstCpuTensorHandle * m_InputToInputWeights
const TensorInfo & GetTensorInfo() const