aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core
diff options
context:
space:
mode:
authorPablo Marquez Tello <pablo.tello@arm.com>2023-06-08 12:00:29 +0100
committerPablo Marquez Tello <pablo.tello@arm.com>2023-06-09 09:12:38 +0000
commit9c8f9a9beca2c158429152bf8a537dfe77a88342 (patch)
treea228e53e5a34d7097632b2fab6dcc32add7bf601 /arm_compute/core
parent6c7cf31655ebc65108f91df946904cc83e1b42f5 (diff)
downloadComputeLibrary-9c8f9a9beca2c158429152bf8a537dfe77a88342.tar.gz
Added int8 support in LeakyRelu/LUT kernel.
* Resolves COMPMID-6292 Change-Id: I15a0ad1c298ff53dd111fda76ef70872aaadac3b Signed-off-by: Pablo Marquez Tello <pablo.tello@arm.com> Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/9740 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Jakub Sujak <jakub.sujak@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/core')
-rw-r--r--arm_compute/core/QuantizationInfo.h13
-rw-r--r--arm_compute/core/Types.h19
2 files changed, 29 insertions, 3 deletions
diff --git a/arm_compute/core/QuantizationInfo.h b/arm_compute/core/QuantizationInfo.h
index ddf1342e32..98ceec6c56 100644
--- a/arm_compute/core/QuantizationInfo.h
+++ b/arm_compute/core/QuantizationInfo.h
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2019-2022 Arm Limited.
+ * Copyright (c) 2019-2023 Arm Limited.
*
* SPDX-License-Identifier: MIT
*
@@ -430,6 +430,17 @@ inline qasymm8_t qasymm8_leaky_relu(qasymm8_t in,
return tmp;
}
+inline qasymm8_signed_t qasymm8_signed_leaky_relu(qasymm8_signed_t in,
+ const UniformQuantizationInfo &qi_in,
+ const UniformQuantizationInfo &qi_out,
+ float alpha)
+{
+ float tmp_f = dequantize_qasymm8_signed(in, qi_in);
+ tmp_f = tmp_f > 0 ? tmp_f : tmp_f * alpha;
+ const qasymm8_t tmp = quantize_qasymm8_signed(tmp_f, qi_out);
+ return tmp;
+}
+
inline qasymm8_t qasymm8_logistic(qasymm8_t in,
const UniformQuantizationInfo &qi_in,
const UniformQuantizationInfo &qi_out)
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index fd45bbaa1e..09b77b5a11 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -1737,7 +1737,14 @@ public:
}
else if(_act == ActivationFunction::LEAKY_RELU)
{
- qasymm8_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+ if(data_type == DataType::QASYMM8)
+ {
+ qasymm8_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+ }
+ else
+ {
+ qasymm8_signed_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
+ }
}
else if(_act == ActivationFunction::LOGISTIC)
{
@@ -1761,7 +1768,7 @@ public:
case ActivationFunction::HARD_SWISH:
return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
case ActivationFunction::LEAKY_RELU:
- return data_type == DataType::QASYMM8;
+ return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
case ActivationFunction::LOGISTIC:
return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
default:
@@ -1807,6 +1814,14 @@ private:
}
}
+ static inline void qasymm8_signed_leaky_relu_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out, float alpha)
+ {
+ for(size_t i = 0; i < lut.size(); ++i)
+ {
+ lut[i] = qasymm8_signed_leaky_relu(i, qi_in, qi_out, alpha);
+ }
+ }
+
static inline void qasymm8_logistic_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
{
for(size_t i = 0; i < lut.size(); ++i)