aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRamy Elgammal <ramy.elgammal@arm.com>2023-04-12 17:31:10 +0100
committerRamy Elgammal <ramy.elgammal@arm.com>2023-04-17 12:16:27 +0000
commitb84df20f17f1fe8d098fb8531543c263541355de (patch)
tree3752ffa3a693ad7b2c5497fbf37f55698b14e48b
parent1ed6a144b1396297b813457016d545af1bb9d823 (diff)
downloadComputeLibrary-b84df20f17f1fe8d098fb8531543c263541355de.tar.gz
Fix unhandled case in ElementwiseUnary
- Case: when the dequantized float value < 0.f the unary op was not called if operator is not LOG or RSQRT Resolves: COMPMID-5994 Signed-off-by: Ramy Elgammal <ramy.elgammal@arm.com> Change-Id: I24d69db22042701f506188ace91ea4ab3dafeccf Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9437 Benchmark: Arm Jenkins <bsgcomp@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Viet-Hoa Do <viet-hoa.do@arm.com> Reviewed-by: Gunes Bayir <gunes.bayir@arm.com>
-rw-r--r--src/cpu/kernels/CpuElementwiseUnaryKernel.cpp2
-rw-r--r--src/cpu/kernels/elementwise_unary/generic/neon/impl.cpp8
-rw-r--r--src/cpu/kernels/elementwise_unary/list.h3
-rw-r--r--tests/validation/NEON/ElementwiseLog.cpp2
4 files changed, 12 insertions, 3 deletions
diff --git a/src/cpu/kernels/CpuElementwiseUnaryKernel.cpp b/src/cpu/kernels/CpuElementwiseUnaryKernel.cpp
index 4b61ee3a1e..dbb752aef3 100644
--- a/src/cpu/kernels/CpuElementwiseUnaryKernel.cpp
+++ b/src/cpu/kernels/CpuElementwiseUnaryKernel.cpp
@@ -191,7 +191,7 @@ static const std::vector<CpuElementwiseUnaryKernel::ElementwiseUnaryKernel> avai
{
return data.dt == DataType::QASYMM8_SIGNED;
},
- REGISTER_QASYMM8_NEON(neon_qasymm8_signed_elementwise_unary),
+ REGISTER_QASYMM8_SIGNED_NEON(neon_qasymm8_signed_elementwise_unary),
nullptr,
},
{
diff --git a/src/cpu/kernels/elementwise_unary/generic/neon/impl.cpp b/src/cpu/kernels/elementwise_unary/generic/neon/impl.cpp
index 2b23e46f40..1b449340ba 100644
--- a/src/cpu/kernels/elementwise_unary/generic/neon/impl.cpp
+++ b/src/cpu/kernels/elementwise_unary/generic/neon/impl.cpp
@@ -183,6 +183,10 @@ void elementwise_op<int8_t>(const ITensor *in, ITensor *out, const Window &windo
{
tmp_f = (127 - qi_out.offset) * qi_out.scale;
}
+ else
+ {
+ tmp_f = elementwise_op_scalar_imp<float>(op, tmp_f);
+ }
}
else
{
@@ -263,6 +267,10 @@ void elementwise_op<uint8_t>(const ITensor *in, ITensor *out, const Window &wind
{
tmp_f = (255 - qi_out.offset) * qi_out.scale;
}
+ else
+ {
+ tmp_f = elementwise_op_scalar_imp<float>(op, tmp_f);
+ }
}
else
{
diff --git a/src/cpu/kernels/elementwise_unary/list.h b/src/cpu/kernels/elementwise_unary/list.h
index c1cfbb8a3a..432fabf4af 100644
--- a/src/cpu/kernels/elementwise_unary/list.h
+++ b/src/cpu/kernels/elementwise_unary/list.h
@@ -42,9 +42,10 @@ DECLARE_ELEMETWISE_UNARY_KERNEL(neon_fp32_elementwise_unary);
DECLARE_ELEMETWISE_UNARY_KERNEL(neon_fp16_elementwise_unary);
DECLARE_ELEMETWISE_UNARY_KERNEL(neon_s32_elementwise_unary);
DECLARE_ELEMETWISE_UNARY_KERNEL(neon_q8_elementwise_unary);
+#ifndef __aarch64__
DECLARE_ELEMETWISE_UNARY_KERNEL(neon_qasymm8_signed_elementwise_unary);
DECLARE_ELEMETWISE_UNARY_KERNEL(neon_qasymm8_elementwise_unary);
-
+#endif // __aarch64__
#undef DECLARE_ELEMETWISE_UNARY_KERNEL
} // namespace cpu
diff --git a/tests/validation/NEON/ElementwiseLog.cpp b/tests/validation/NEON/ElementwiseLog.cpp
index 320ece2e73..1175903dac 100644
--- a/tests/validation/NEON/ElementwiseLog.cpp
+++ b/tests/validation/NEON/ElementwiseLog.cpp
@@ -106,7 +106,7 @@ TEST_SUITE(QASYMM8)
FIXTURE_DATA_TEST_CASE(RunSmall, NELogLayerQuantizedFixture<uint8_t>, framework::DatasetMode::ALL, combine(combine(combine(
datasets::SmallShapes(),
framework::dataset::make("DataType", DataType::QASYMM8)),
- framework::dataset::make("InputQInfo", { QuantizationInfo(10.5, 0) })),
+ framework::dataset::make("InputQInfo", { QuantizationInfo(10.5, 0), QuantizationInfo(0.5, -10) })),
framework::dataset::make("OutputQInfo", { QuantizationInfo(5, 10) })))
{
// Validate output