aboutsummaryrefslogtreecommitdiff
path: root/src/cpu/kernels/pool2d/neon/fp16.cpp
diff options
context:
space:
mode:
authorAdnan AlSinan <adnan.alsinan@arm.com>2023-02-14 14:24:09 +0000
committerAdnan AlSinan <adnan.alsinan@arm.com>2023-02-28 19:19:08 +0000
commit227db8db83cd85d8704a8edbd4e8c88af0dd1f84 (patch)
tree9247a7d4cfd9475f97d1cda6409af9f312d50989 /src/cpu/kernels/pool2d/neon/fp16.cpp
parentd538d161f6e55290bf1bb0b27cf26666379d0255 (diff)
downloadComputeLibrary-227db8db83cd85d8704a8edbd4e8c88af0dd1f84.tar.gz
Add an option to use lowest for max-pooling
- Add a parameter in PoolingLayerInfo class to pick which value to use as min for max-pooling. Resolves: [ONCPUML-1166] Signed-off-by: Adnan AlSinan <adnan.alsinan@arm.com> Change-Id: I34e1cccc15176bbf31523c61e99f3188ddca23e1 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/8989 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: SiCong Li <sicong.li@arm.com> Reviewed-by: Pablo Marquez Tello <pablo.tello@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'src/cpu/kernels/pool2d/neon/fp16.cpp')
-rw-r--r--src/cpu/kernels/pool2d/neon/fp16.cpp14
1 files changed, 7 insertions, 7 deletions
diff --git a/src/cpu/kernels/pool2d/neon/fp16.cpp b/src/cpu/kernels/pool2d/neon/fp16.cpp
index 13e21b1e70..4e15d3ad3f 100644
--- a/src/cpu/kernels/pool2d/neon/fp16.cpp
+++ b/src/cpu/kernels/pool2d/neon/fp16.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2021-2022 Arm Limited.
+ * Copyright (c) 2021-2023 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -176,10 +176,10 @@ void poolingMxN_fp16_neon_nhwc(const ITensor *src, ITensor *dst0, ITensor *dst1,
int pool_stride_x = 0;
int pool_stride_y = 0;
std::tie(pool_stride_x, pool_stride_y) = pool_info.pad_stride_info.stride();
- const int upper_bound_w = src->info()->dimension(1) + (pool_info.exclude_padding ? 0 : pool_pad_right);
- const int upper_bound_h = src->info()->dimension(2) + (pool_info.exclude_padding ? 0 : pool_pad_bottom);
-
- float16x8_t vres;
+ const int upper_bound_w = src->info()->dimension(1) + (pool_info.exclude_padding ? 0 : pool_pad_right);
+ const int upper_bound_h = src->info()->dimension(2) + (pool_info.exclude_padding ? 0 : pool_pad_bottom);
+ const float16_t min_value = get_initial_min<half_float::half>(pool_info.use_inf_as_limit);
+ float16x8_t vres;
execute_window_loop(window_out, [&](const Coordinates & id)
{
@@ -228,7 +228,7 @@ void poolingMxN_fp16_neon_nhwc(const ITensor *src, ITensor *dst0, ITensor *dst1,
}
else
{
- vres = vdupq_n_f16(-std::numeric_limits<float>::infinity());
+ vres = vdupq_n_f16(min_value);
for(int y = pool_start_y; y < pool_end_y; ++y)
{
@@ -287,7 +287,7 @@ void poolingMxN_fp16_neon_nhwc(const ITensor *src, ITensor *dst0, ITensor *dst1,
}
else
{
- res = -std::numeric_limits<float>::infinity();
+ res = min_value;
for(int y = pool_start_y; y < pool_end_y; ++y)
{
for(int x = pool_start_x; x < pool_end_x; ++x)