diff options
author | Manuel Bottini <manuel.bottini@arm.com> | 2019-10-17 18:37:26 +0100 |
---|---|---|
committer | Pablo Marquez <pablo.tello@arm.com> | 2019-10-24 09:11:40 +0000 |
commit | 07263980e66059a91ce57612e4ca8f4b2a2a206a (patch) | |
tree | 138dc3ecf835df9f38a60959379a52eca08f8b0f /src/runtime/CL | |
parent | 05069f07bcf95676597698a79926327555276362 (diff) | |
download | ComputeLibrary-07263980e66059a91ce57612e4ca8f4b2a2a206a.tar.gz |
COMPMID-2501: Support multiplier > 1 during QASYMM8 requantization for Quantized LSTM
Change-Id: I7eddbdf77881f313b707b9e59428245f1330a2cf
Signed-off-by: Manuel Bottini <manuel.bottini@arm.com>
Reviewed-on: https://review.mlplatform.org/c/2119
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Pablo Marquez <pablo.tello@arm.com>
Diffstat (limited to 'src/runtime/CL')
-rw-r--r-- | src/runtime/CL/functions/CLLSTMLayerQuantized.cpp | 12 |
1 files changed, 6 insertions, 6 deletions
diff --git a/src/runtime/CL/functions/CLLSTMLayerQuantized.cpp b/src/runtime/CL/functions/CLLSTMLayerQuantized.cpp index 4e6df1d1cb..e5f127825b 100644 --- a/src/runtime/CL/functions/CLLSTMLayerQuantized.cpp +++ b/src/runtime/CL/functions/CLLSTMLayerQuantized.cpp @@ -159,8 +159,7 @@ void CLLSTMLayerQuantized::configure(const ICLTensor *input, const float multiplier = 4096.f * qasymm.uniform().scale * qweights.uniform().scale; int output_multiplier = 0; int output_shift = 0; - - quantization::calculate_quantized_multiplier_less_than_one(multiplier, &output_multiplier, &output_shift); + quantization::calculate_quantized_multiplier(multiplier, &output_multiplier, &output_shift); _memory_group.manage(&_output_lowp); _output_stage.configure(&_output_highp, &_bias, &_output_lowp, output_multiplier, output_shift); @@ -361,12 +360,13 @@ Status CLLSTMLayerQuantized::validate(const ITensorInfo *input, input_concatenated.set_quantization_info(QuantizationInfo(qasymm.uniform().scale, qasymm.uniform().offset)); weights_transposed.set_quantization_info(QuantizationInfo(qweights.uniform().scale, qweights.uniform().offset)); - // multiplier = (input_scale * weights_scale) / output_scale (2 ^ (-12)) const TensorInfo output_lowp(output_highp.tensor_shape(), 1, DataType::QSYMM16, qsymm_3); - const float multiplier = 4096.f * qasymm.uniform().scale * qweights.uniform().scale; - ARM_COMPUTE_UNUSED(multiplier); - ARM_COMPUTE_RETURN_ERROR_ON(multiplier > 1.0f); + const float multiplier = 4096.f * qasymm.uniform().scale * qweights.uniform().scale; + int output_multiplier = 0; + int output_shift = 0; + ARM_COMPUTE_RETURN_ON_ERROR(quantization::calculate_quantized_multiplier(multiplier, &output_multiplier, &output_shift)); + // _output_stage ARM_COMPUTE_RETURN_ON_ERROR(CLGEMMLowpQuantizeDownInt32ToInt16ScaleByFixedPoint::validate(&output_highp, &bias_concatenated, &output_lowp)); |