diff options
author | Michele Di Giorgio <michele.digiorgio@arm.com> | 2019-10-23 10:53:10 +0100 |
---|---|---|
committer | Michele Di Giorgio <michele.digiorgio@arm.com> | 2019-11-28 10:02:15 +0000 |
commit | 14cbfb2921990d8bf125231e350e2ac8dcd95a8b (patch) | |
tree | 9bec073d72c44c480c8807601889481d9b89ee7e /tests/validation/reference/UtilsQuantizedAsymm.h | |
parent | ed7b27dd7cbdae57b880029840ad0235523848e0 (diff) | |
download | ComputeLibrary-14cbfb2921990d8bf125231e350e2ac8dcd95a8b.tar.gz |
COMPMID-2609: Enable quantization with multiplier greater than 1 on OpenCL
Change-Id: I050f1f84e214e61f7cbb0197a672b68a4940edae
Signed-off-by: Michele Di Giorgio <michele.digiorgio@arm.com>
Reviewed-on: https://review.mlplatform.org/c/2158
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Manuel Bottini <manuel.bottini@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Giorgio Arena <giorgio.arena@arm.com>
Diffstat (limited to 'tests/validation/reference/UtilsQuantizedAsymm.h')
-rw-r--r-- | tests/validation/reference/UtilsQuantizedAsymm.h | 26 |
1 files changed, 22 insertions, 4 deletions
diff --git a/tests/validation/reference/UtilsQuantizedAsymm.h b/tests/validation/reference/UtilsQuantizedAsymm.h index b7b69d588a..444696c93a 100644 --- a/tests/validation/reference/UtilsQuantizedAsymm.h +++ b/tests/validation/reference/UtilsQuantizedAsymm.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2017 ARM Limited. + * Copyright (c) 2017-2019 ARM Limited. * * SPDX-License-Identifier: MIT * @@ -21,8 +21,8 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -#ifndef __ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H__ -#define __ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H__ +#ifndef ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H +#define ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H #include <cstdint> @@ -51,7 +51,25 @@ inline int32_t asymm_int_mult(int32_t a, int32_t b) int32_t ab_x2_high32 = static_cast<int32_t>((ab_64 + nudge) / (1ll << 31)); return overflow ? std::numeric_limits<int32_t>::max() : ab_x2_high32; } + +/** Quantize down the input value in range [min, max]. */ +inline int32_t quantize_down_scale_by_fixedpoint(int32_t val, int32_t result_mult_int, int32_t result_shift, + int32_t result_offset_after_shift, int32_t min, int32_t max) +{ + int32_t res = 0; + if(result_shift < 0) + { + res = asymm_int_mult(val * (1 << (-result_shift)), result_mult_int); + } + else + { + res = asymm_rounding_divide_by_pow2(asymm_int_mult(val, result_mult_int), result_shift); + } + res += result_offset_after_shift; + res = utility::clamp<int32_t>(res, min, max); + return res; +} } // namespace validation } // namespace test } // namespace arm_compute -#endif /* __ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H__ */ +#endif /* ARM_COMPUTE_TEST_VALIDATION_UTILS_QUANTIZED_ASYMM_H */ |