diff options
author | Pablo Marquez Tello <pablo.tello@arm.com> | 2024-04-24 13:00:12 +0100 |
---|---|---|
committer | Michael Kozlov <michael.kozlov@arm.com> | 2024-04-25 18:54:34 +0100 |
commit | f652703243db6bda49e2464b186e48e3d8c2a740 (patch) | |
tree | a1ca8c5b6404ba2d4d4821ee7b77e93edc88c396 /src | |
parent | ff2596a93a0c52b0bb8533c41e7787392e072ec4 (diff) | |
download | ComputeLibrary-f652703243db6bda49e2464b186e48e3d8c2a740.tar.gz |
Add padding to the shift and multipliers buffers
* All per-channel requantizing hybrid assembly kernels require
these buffers to be padded.
* Resolves MLCE-1255
Change-Id: I892b8ee9b31e079189ec72f3fc6da4ce5efda974
Signed-off-by: Pablo Marquez Tello <pablo.tello@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/11491
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/core/utils/quantization/AsymmHelpers.cpp | 16 |
1 files changed, 8 insertions, 8 deletions
diff --git a/src/core/utils/quantization/AsymmHelpers.cpp b/src/core/utils/quantization/AsymmHelpers.cpp index f66d3e7064..f8b74a985d 100644 --- a/src/core/utils/quantization/AsymmHelpers.cpp +++ b/src/core/utils/quantization/AsymmHelpers.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017-2023 Arm Limited. + * Copyright (c) 2017-2024 Arm Limited. * * SPDX-License-Identifier: MIT * @@ -122,13 +122,13 @@ arm_compute::Status calculate_quantized_multipliers(const QuantizationInfo &iq_ ARM_COMPUTE_RETURN_ERROR_ON(iq_info.scale().empty()); ARM_COMPUTE_RETURN_ERROR_ON(wq_info.scale().empty()); ARM_COMPUTE_RETURN_ERROR_ON(oq_info.scale().empty()); - - const unsigned int size = wq_info.scale().size(); - - auto &quant_multipliers = stage_info.gemmlowp_multipliers; - auto &quant_shifts = stage_info.gemmlowp_shifts; - quant_multipliers.resize(size); - quant_shifts.resize(size); + constexpr unsigned int padding_elems = 32; // assembly kernels assume the shifts and multipliers buffers are padded + const unsigned int size = wq_info.scale().size(); + const size_t padded_size = (size == 1) ? 1 : size + padding_elems; + auto &quant_multipliers = stage_info.gemmlowp_multipliers; + auto &quant_shifts = stage_info.gemmlowp_shifts; + quant_multipliers.resize(padded_size); + quant_shifts.resize(padded_size); const auto &w_scales = wq_info.scale(); const float i_scale = iq_info.scale().at(0); |