aboutsummaryrefslogtreecommitdiff
path: root/arm_compute
diff options
context:
space:
mode:
Diffstat (limited to 'arm_compute')
-rw-r--r--arm_compute/core/QuantizationInfo.h62
-rw-r--r--arm_compute/core/Types.h107
2 files changed, 2 insertions, 167 deletions
diff --git a/arm_compute/core/QuantizationInfo.h b/arm_compute/core/QuantizationInfo.h
index 98ceec6c56..f760d7512c 100644
--- a/arm_compute/core/QuantizationInfo.h
+++ b/arm_compute/core/QuantizationInfo.h
@@ -399,68 +399,6 @@ inline float dequantize_qsymm8(int8_t value, const UniformQuantizationInfo &qinf
return value * qinfo.scale;
}
-inline qasymm8_t qasymm8_hard_swish(qasymm8_t in,
- const UniformQuantizationInfo &qi_in,
- const UniformQuantizationInfo &qi_out)
-{
- float tmp_f = dequantize_qasymm8(in, qi_in);
- tmp_f = tmp_f * ((std::min(std::max((tmp_f + 3), 0.0f), 6.0f)) * 0.166666667f);
- const qasymm8_t tmp = quantize_qasymm8(tmp_f, qi_out);
- return tmp;
-}
-
-inline qasymm8_signed_t qasymm8_signed_hard_swish(qasymm8_signed_t in,
- const UniformQuantizationInfo &qi_in,
- const UniformQuantizationInfo &qi_out)
-{
- float tmp_f = dequantize_qasymm8_signed(in, qi_in);
- tmp_f = tmp_f * ((std::min(std::max((tmp_f + 3), 0.0f), 6.0f)) * 0.166666667f);
- const qasymm8_t tmp = quantize_qasymm8_signed(tmp_f, qi_out);
- return tmp;
-}
-
-inline qasymm8_t qasymm8_leaky_relu(qasymm8_t in,
- const UniformQuantizationInfo &qi_in,
- const UniformQuantizationInfo &qi_out,
- float alpha)
-{
- float tmp_f = dequantize_qasymm8(in, qi_in);
- tmp_f = tmp_f > 0 ? tmp_f : tmp_f * alpha;
- const qasymm8_t tmp = quantize_qasymm8(tmp_f, qi_out);
- 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)
-{
- float tmp_f = dequantize_qasymm8(in, qi_in);
- tmp_f = 1.f / (1.f + std::exp(-tmp_f));
- const qasymm8_t tmp = quantize_qasymm8(tmp_f, qi_out);
- return tmp;
-}
-
-inline qasymm8_signed_t qasymm8_signed_logistic(qasymm8_signed_t in,
- const UniformQuantizationInfo &qi_in,
- const UniformQuantizationInfo &qi_out)
-{
- float tmp_f = dequantize_qasymm8_signed(in, qi_in);
- tmp_f = 1.f / (1.f + std::exp(-tmp_f));
- const qasymm8_signed_t tmp = quantize_qasymm8_signed(tmp_f, qi_out);
- return tmp;
-}
-
/** Dequantize a value given a 8-bit symmetric quantization scheme
*
* @param[in] value Value to dequantize
diff --git a/arm_compute/core/Types.h b/arm_compute/core/Types.h
index 09b77b5a11..2613d46d14 100644
--- a/arm_compute/core/Types.h
+++ b/arm_compute/core/Types.h
@@ -1721,66 +1721,11 @@ public:
{
return _lut;
}
-
- void init_lut(DataType data_type, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
+ void setLookupTable256(LookupTable256 &lut)
{
- if(_act == ActivationFunction::HARD_SWISH)
- {
- if(data_type == DataType::QASYMM8)
- {
- qasymm8_hard_swish_populate_table(_lut, qi_in, qi_out);
- }
- else
- {
- qasymm8_signed_hard_swish_populate_table(_lut, qi_in, qi_out);
- }
- }
- else if(_act == ActivationFunction::LEAKY_RELU)
- {
- 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)
- {
- 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);
- }
- }
+ _lut = std::move(lut);
}
#endif // __aarch64__
-
- static inline bool is_lut_supported(ActivationFunction act_func, DataType data_type)
- {
-#ifdef __aarch64__
- switch(act_func)
- {
- case ActivationFunction::HARD_SWISH:
- return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
- case ActivationFunction::LEAKY_RELU:
- return data_type == DataType::QASYMM8 || data_type == DataType::QASYMM8_SIGNED;
- 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);
- return false;
-#endif // __aarch64__
- }
-
private:
ActivationFunction _act = { ActivationLayerInfo::ActivationFunction::IDENTITY };
float _a = {};
@@ -1789,54 +1734,6 @@ private:
#ifdef __aarch64__
LookupTable256 _lut = {};
-
- static inline void qasymm8_hard_swish_populate_table(LookupTable256 &lut, const UniformQuantizationInfo &qi_in, const UniformQuantizationInfo &qi_out)
- {
- for(size_t i = 0; i < lut.size(); ++i)
- {
- lut[i] = qasymm8_hard_swish(i, qi_in, qi_out);
- }
- }
-
- static inline void qasymm8_signed_hard_swish_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_hard_swish(i, qi_in, qi_out);
- }
- }
-
- static inline void qasymm8_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_leaky_relu(i, qi_in, qi_out, alpha);
- }
- }
-
- 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)
- {
- 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__
};