aboutsummaryrefslogtreecommitdiff
path: root/arm_compute/core/Types.h
diff options
context:
space:
mode:
authorViet-Hoa Do <viet-hoa.do@arm.com>2022-08-10 11:56:49 +0100
committerViet-Hoa Do <viet-hoa.do@arm.com>2022-08-17 11:35:03 +0000
commit29db3d293302254b80e82651895d997ca145142a (patch)
tree606d1193e7f92623e0af97aea513106ec468bff0 /arm_compute/core/Types.h
parente54d8c07e75d70baeb80fecbb43088027ea45658 (diff)
downloadComputeLibrary-29db3d293302254b80e82651895d997ca145142a.tar.gz
Add LUT for quantized sigmoid function
* Move LUT implementation to a seperate file. It will be used for both QASYMM8 and QASYMM8_SIGNED. * Fix wrong constant value related to QASYMM8_SIGNED leaky ReLU in 32-bit build. Resolves: COMPMID-5464 Signed-off-by: Viet-Hoa Do <viet-hoa.do@arm.com> Change-Id: I2b24d52409a38f1b66fd532f431eff8a9e4547b6 Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/8066 Comments-Addressed: Arm Jenkins <bsgcomp@arm.com> Reviewed-by: Gunes Bayir <gunes.bayir@arm.com> Tested-by: Arm Jenkins <bsgcomp@arm.com> Benchmark: Arm Jenkins <bsgcomp@arm.com>
Diffstat (limited to 'arm_compute/core/Types.h')
-rw-r--r--arm_compute/core/Types.h43
1 files changed, 40 insertions, 3 deletions
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index 952c174194..1fad815a50 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -1686,7 +1686,7 @@ public:
return _lut;
}
- void init_lut(const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
+ void init_lut(DataType data_type, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
{
if(_act == ActivationFunction::HARD_SWISH)
{
@@ -1696,14 +1696,35 @@ public:
{
qasymm8_leaky_relu_populate_table(_lut, qi_in, qi_out, _a);
}
+ else if(_act == ActivationFunction::LOGISTIC)
+ {
+ if(data_type == DataType::QASYMM8)
+ {
+ qasymm8_logistic_populate_table(_lut, qi_in, qi_out);
+ }
+ else
+ {
+ qasymm8_signed_logistic_populate_table(_lut, qi_in, qi_out);
+ }
+ }
}
#endif // __aarch64__
static inline bool is_lut_supported(ActivationFunction act_func, DataType data_type)
{
#ifdef __aarch64__
- auto supported = (data_type == DataType::QASYMM8 && (act_func == ActivationFunction::HARD_SWISH || act_func == ActivationFunction::LEAKY_RELU));
- return supported;
+ switch(act_func)
+ {
+ case ActivationFunction::HARD_SWISH:
+ case ActivationFunction::LEAKY_RELU:
+ return data_type == DataType::QASYMM8;
+
+ case ActivationFunction::LOGISTIC:
+ return (data_type == DataType::QASYMM8) || (data_type == DataType::QASYMM8_SIGNED);
+
+ default:
+ return false;
+ }
#else // __aarch64__
ARM_COMPUTE_UNUSED(act_func);
ARM_COMPUTE_UNUSED(data_type);
@@ -1735,6 +1756,22 @@ private:
lut[i] = qasymm8_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)
+ {
+ lut[i] = qasymm8_logistic(i, qi_in, qi_out);
+ }
+ }
+
+ static inline void qasymm8_signed_logistic_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
+ {
+ for(size_t i = 0; i < lut.size(); ++i)
+ {
+ lut[i] = qasymm8_signed_logistic(static_cast<int8_t>(i), qi_in, qi_out);
+ }
+ }
#endif // __aarch64__
};