aboutsummaryrefslogtreecommitdiff
path: root/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
diff options
context:
space:
mode:
authorPablo Tello <pablo.tello@arm.com>2019-10-21 14:25:41 +0100
committerGian Marco Iodice <gianmarco.iodice@arm.com>2019-11-08 12:07:21 +0000
commit5264b7d5555ec980f9c52c719122479d0d676af8 (patch)
tree78260be4ee31d89d00705acbf1e0ed2361144bd4 /src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
parent68adf4449b1f92dd2362d88bb0fd565c2c06d22c (diff)
downloadComputeLibrary-5264b7d5555ec980f9c52c719122479d0d676af8.tar.gz
COMPMID-2576: Fuse activation in Winograd output transform.
Change-Id: I26dd1307847adeaaefae0a7374b9858c07d71372 Signed-off-by: Pablo Tello <pablo.tello@arm.com> Reviewed-on: https://review.mlplatform.org/c/2172 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Diffstat (limited to 'src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp')
-rw-r--r--src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp16
1 files changed, 11 insertions, 5 deletions
diff --git a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
index ce921cea01..05f06a81ee 100644
--- a/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
+++ b/src/core/NEON/kernels/convolution/winograd/winograd_transforms/output_6_3_fp32_fp32_integers.cpp
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019 ARM Limited.
+ * Copyright (c) 2017-2019 ARM Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -36,7 +36,9 @@ void OutputTransform<1, 3, 1, 8, float, float, WinogradRoots::Integers>::transfo
const float* bptr,
float* const output,
const int, // No need to stride across rows
- const int output_col_stride
+ const int output_col_stride,
+ const float output_min,
+ const float output_max
)
{
// Construct a map to the output cells
@@ -76,7 +78,9 @@ void OutputTransform<1, 3, 1, 8, float, float, WinogradRoots::Integers>::transfo
}
for (int j = 0; j < output_tile_cols; j++)
{
- vst1q_f32(outptrs[j], f[j] + b);
+ const auto y = vminq_f32(vmaxq_f32(f[j] + b, vdupq_n_f32(output_min)),
+ vdupq_n_f32(output_max));
+ vst1q_f32(outptrs[j], y);
outptrs[j] += 4;
}
}
@@ -107,7 +111,9 @@ void OutputTransform<1, 3, 1, 8, float, float, WinogradRoots::Integers>::transfo
}
for (int j = 0; j < output_tile_cols; j++)
{
- vst1_f32(outptrs[j], f[j] + b);
+ const auto y = vmin_f32(vmax_f32(f[j] + b, vdup_n_f32(output_min)),
+ vdup_n_f32(output_max));
+ vst1_f32(outptrs[j], y);
outptrs[j] += 2;
}
}
@@ -138,7 +144,7 @@ void OutputTransform<1, 3, 1, 8, float, float, WinogradRoots::Integers>::transfo
}
for (int j = 0; j < output_tile_cols; j++)
{
- *(outptrs[j]++) = f[j] + b;
+ *(outptrs[j]++) = std::max(std::min(f[j] + b, output_max), output_min);
}
}
}