From: Georgi Gerganov Date: Tue, 4 Jun 2024 07:01:09 +0000 (+0300) Subject: ggml : prevent builds with -ffinite-math-only (llama/7726) X-Git-Tag: upstream/0.0.1642~612 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=f3c91f633082ee5b43cb7aaba72a9f835dcb7482;p=pkg%2Fggml%2Fsources%2Fggml ggml : prevent builds with -ffinite-math-only (llama/7726) This enforces a check that -fno-finite-math-only was set and that the operating compiling mode is not in finite maths mode. This is because during rewriting of silu and softmax for cpu #7154 there emerged an issue where the result that was observed when >1 slot was nondeterministic as found by @JohannesGaessler. @LostRuins narrowed the problem down to -ffinite-math-only which was theorised to be due to SiLU, instead of flushing small values to 0, returns NaN or some other garbage. @jart proposed a fix that @ggerganov then implemented in this fix ref https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2145661825 --- diff --git a/src/ggml.c b/src/ggml.c index 000d9db7..8869e146 100644 --- a/src/ggml.c +++ b/src/ggml.c @@ -2272,6 +2272,11 @@ inline static float ggml_silu_f32(float x) { return x/(1.0f + expf(-x)); } +#if __FINITE_MATH_ONLY__ +#error "some routines in ggml.c require non-finite math arithmetics -- pass -fno-finite-math-only to the compiler to fix" +#error "ref: https://github.com/ggerganov/llama.cpp/pull/7154#issuecomment-2143844461" +#endif + #if defined(__ARM_NEON) && defined(__aarch64__) // adapted from arm limited optimized routine