diff options
author | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2021-07-29 16:24:36 +0100 |
---|---|---|
committer | Gian Marco Iodice <gianmarco.iodice@arm.com> | 2021-07-30 14:31:52 +0000 |
commit | 9a1e28b4df4f5b49bb497c8463a8bc7cedaaf110 (patch) | |
tree | 72e151bfae03a83019fb4c4da42ffabf5c7a2826 /src/core/NEON/kernels/arm_gemm/utils.hpp | |
parent | a76e40347eed7f9f51ec019e08f4ed16f3621e7b (diff) | |
download | ComputeLibrary-9a1e28b4df4f5b49bb497c8463a8bc7cedaaf110.tar.gz |
Compilation issue: neon=1 armv8.2 on Android with NDKr18beta1
- The issue was related to the __fp16 specialization on the depthwise
convolution layer (cpu)
Resolves COMPMID-4741
Change-Id: I6072230c60df6659951db2a1adf611eca6ab7efe
Signed-off-by: Gian Marco Iodice <gianmarco.iodice@arm.com>
Reviewed-on: https://review.mlplatform.org/c/ml/ComputeLibrary/+/6026
Comments-Addressed: Arm Jenkins <bsgcomp@arm.com>
Tested-by: Arm Jenkins <bsgcomp@arm.com>
Reviewed-by: Georgios Pinitas <georgios.pinitas@arm.com>
Diffstat (limited to 'src/core/NEON/kernels/arm_gemm/utils.hpp')
-rw-r--r-- | src/core/NEON/kernels/arm_gemm/utils.hpp | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/core/NEON/kernels/arm_gemm/utils.hpp b/src/core/NEON/kernels/arm_gemm/utils.hpp index 82464d2eff..2ae3db19ed 100644 --- a/src/core/NEON/kernels/arm_gemm/utils.hpp +++ b/src/core/NEON/kernels/arm_gemm/utils.hpp @@ -27,6 +27,7 @@ #include "arm_gemm.hpp" #include <cstddef> +#include <tuple> // Macro for unreachable code (e.g. impossible default cases on switch) #define UNREACHABLE(why) __builtin_unreachable() @@ -202,6 +203,38 @@ inline unsigned long get_vector_length(VLType vl_type) { return 16 / sizeof(T); } } + +// get_default_activation_values(): Returns the default values for activation min and max for integer activation. +template <typename T> +inline std::tuple<T, T> get_default_activation_values() +{ + const T min = static_cast<T>(std::numeric_limits<T>::min()); + const T max = static_cast<T>(std::numeric_limits<T>::max()); + + return std::make_tuple(min, max); +} + +// get_default_activation_values(): Returns the default values for activation min and max for float activation. +template <> +inline std::tuple<float, float> get_default_activation_values() +{ + const float min = static_cast<float>(-std::numeric_limits<float>::infinity()); + const float max = static_cast<float>(std::numeric_limits<float>::infinity()); + + return std::make_tuple(min, max); +} + +#if defined(__ARM_FP16_ARGS) +// get_default_activation_values(): Returns the default values for activation min and max for __fp16 activation. +template <> +inline std::tuple<__fp16, __fp16> get_default_activation_values() +{ + const __fp16 min = static_cast<__fp16>(-std::numeric_limits<float>::infinity()); + const __fp16 max = static_cast<__fp16>(std::numeric_limits<float>::infinity()); + + return std::make_tuple(min, max); +} +#endif // defined(__ARM_FP16_ARGS) } // utils namespace } // arm_gemm namespace |