From 1e864618544c64d34b9671472c8e8d456cf47982 Mon Sep 17 00:00:00 2001 From: Gian Marco Iodice Date: Wed, 21 Aug 2019 17:01:53 +0100 Subject: COMPMID-2602: FullyConnected VTS failure on CL and Neon TENSOR_QUANT8_ASYMM Change-Id: I918d2b9e6d1297cf78c7e567b2a95406875f82ad Signed-off-by: Gian Marco Iodice Reviewed-on: https://review.mlplatform.org/c/1782 Reviewed-by: Georgios Pinitas Comments-Addressed: Arm Jenkins Tested-by: Arm Jenkins --- src/runtime/CL/functions/CLFullyConnectedLayer.cpp | 7 +++++++ src/runtime/NEON/functions/NEFullyConnectedLayer.cpp | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/src/runtime/CL/functions/CLFullyConnectedLayer.cpp b/src/runtime/CL/functions/CLFullyConnectedLayer.cpp index 87d4c56a0e..c5da649e30 100644 --- a/src/runtime/CL/functions/CLFullyConnectedLayer.cpp +++ b/src/runtime/CL/functions/CLFullyConnectedLayer.cpp @@ -331,6 +331,13 @@ Status CLFullyConnectedLayer::validate(const ITensorInfo *input, const ITensorIn // Validate output stage for asymmetric quantized types if(is_quantized) { + const UniformQuantizationInfo iq_info = input->quantization_info().uniform(); + const UniformQuantizationInfo wq_info = weights->quantization_info().uniform(); + const UniformQuantizationInfo oq_info = output->quantization_info().uniform(); + const float multiplier = iq_info.scale * wq_info.scale / oq_info.scale; + + ARM_COMPUTE_UNUSED(multiplier); + ARM_COMPUTE_RETURN_ERROR_ON(multiplier > 1.0f); ARM_COMPUTE_RETURN_ON_ERROR(CLGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPoint::validate(&gemmlowp_output, biases, output)); } diff --git a/src/runtime/NEON/functions/NEFullyConnectedLayer.cpp b/src/runtime/NEON/functions/NEFullyConnectedLayer.cpp index 7a74a7ea90..12a5a1d724 100644 --- a/src/runtime/NEON/functions/NEFullyConnectedLayer.cpp +++ b/src/runtime/NEON/functions/NEFullyConnectedLayer.cpp @@ -328,6 +328,13 @@ Status NEFullyConnectedLayer::validate(const ITensorInfo *input, const ITensorIn // Validate output stage for asymmetric quantized types if(is_quantized) { + const UniformQuantizationInfo iq_info = input->quantization_info().uniform(); + const UniformQuantizationInfo wq_info = weights->quantization_info().uniform(); + const UniformQuantizationInfo oq_info = output->quantization_info().uniform(); + const float multiplier = iq_info.scale * wq_info.scale / oq_info.scale; + + ARM_COMPUTE_UNUSED(multiplier); + ARM_COMPUTE_RETURN_ERROR_ON(multiplier > 1.0f); ARM_COMPUTE_RETURN_ON_ERROR(NEGEMMLowpQuantizeDownInt32ToUint8ScaleByFixedPoint::validate(&gemmlowp_output, biases, output)); } -- cgit v1.2.1