]> git.djapps.eu Git - pkg/ggml/sources/ggml/commit
ggml-cpu : fix leftover handling in ggml_vec_scale_f32 for SVE (llama/16443)
authorDaniel Bevenius <redacted>
Mon, 6 Oct 2025 12:17:12 +0000 (14:17 +0200)
committerGeorgi Gerganov <redacted>
Sun, 12 Oct 2025 04:57:25 +0000 (07:57 +0300)
commita2a9938a58a053436b8f3a895f06b85c489848e5
tree241e743d7b85da34a68f001135a1177a372a63cb
parent61b477aa94ed0c57702bff880e78db75b3e0c0fb
ggml-cpu : fix leftover handling in ggml_vec_scale_f32 for SVE (llama/16443)

This commit updates the leftover handling in ggml_vec_scale_f32.

The motivation for this is that the code currently incorrectly assumes
there would be fewer than ggml_f32_epr leftover elements. However,
since the main loop processes 2*ggml_f32_epr elements per iteration
, there can be up to (2*ggml_f32_epr - 1) leftover elements.

The original single-pass leftover code could only process ggml_f32_epr
elements, leaving some elements unscaled.

Example scenario with 256-bit SVE:
```
ggml_f32_epr  = 8 (elements per register)
ggml_f32_step = 16 (two registers per iteration)
n             = 25
np            = 16
leftovers     = 9 elements (16-24)

Original    : processes only elements 16-23, misses element 24
This commit : loop processes elements 16-23, then element 24
```

Refs: https://github.com/ggml-org/llama.cpp/actions/runs/18070620247/job/51419855630
src/ggml-cpu/vec.h