开源llama.cpp Releases·原文 2026年10月21日

llama.cpp b11761修正ARM NEON的FP32→FP16转换路径未启用问题

该版本在ggml-cpu中为 __ARM_NEON分支补上FP32_TO_FP16宏选择,使此前已定义但从未被调用的单条fcvt指令真正进入计算路径;同时新增编译期 #error检查,防止同类宏定义与选择不一致再次静默通过。

AI解读:llama.cpp发布b11761版本,核心改动在ggml-cpu:__ARM_NEON分支此前同时定义了GGML_CPU_COMPUTE_* 宏,却只选择FP16_TO_FP32,导致FP32_TO_FP16落到可移植的软件转换实现。

按发布说明,neon_compute_fp32_to_fp16原本是单条fcvt指令的实现,一直被定义但没有任何引用;__POWER9_VECTOR__与 __riscv_zfhmin两个分支则同时选择了两个方向。

发布说明解释问题长期未被发现的原因:软件回退实现结果正确,唯一症状是一条硬件指令从未被执行到。为此新增一对 #error,拒绝定义了COMPUTE宏却未选择它的分支。

FP16_TO_FP32方向保留了 !defined(__F16C__) 例外,发布说明称这是应PR 30343的要求,让该方向继续走查找表。同时替换了回退逻辑上方的注释,原注释单独点名NEON和POWER9。

该说明由llama.cpp发布页给出,属于项目方对本次改动的自述,未附带性能对比数据;因此无法据此推断该改动带来多少实际加速。

b11761同步提供多平台预编译包,覆盖macOS Apple Silicon与Intel、iOS XCFramework、Ubuntu(x64、arm64、s390x,含Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL FP32/FP16)、Android arm64、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm)及UI包;macOS KleidiAI版本和openEuler构建标注为DISABLED。

llama.cpp发布b11761版本,改动集中在ggml-cpu的浮点类型转换代码:__ARM_NEON分支将启用FP32→FP16的NEON转换路径,此前该方向一直由可移植的软件实现接手。

发布说明由项目方给出,其中提到新增编译期 #error检查,用于阻止定义了GGML_CPU_COMPUTE_* 宏却未实际选择该宏的分支通过编译。

NEON分支的宏选择缺项

发布说明称,__ARM_NEON分支同时定义了GGML_CPU_COMPUTE_* 相关宏,但只选择了FP16_TO_FP32,FP32_TO_FP16因此落到可移植的软件转换。名为neon_compute_fp32_to_fp16的实现是单条fcvt指令,虽然被定义,却没有被任何代码引用。

作为对照,发布说明指出 __POWER9_VECTOR__和 __riscv_zfhmin两个分支都同时选择了两个方向。

为何长期未被发现,以及新增的检查

按发布说明的解释,软件回退实现本身结果正确,所以问题没有表现为错误输出,唯一症状是一条硬件指令从未被执行到。

这次改动增加了一对 #error,拒绝“定义了COMPUTE宏但未选择它”的分支,让同类不一致在编译阶段暴露。发布说明同时替换了回退逻辑上方的注释,原注释单独点名NEON和POWER9,并指向一处如今已在分支内完成的选择。

FP16_TO_FP32方向的保留项

FP16_TO_FP32这一半保留了 !defined(__F16C__) 的例外。发布说明称,这是按PR 30343的安排,让该方向继续使用查找表。

随版本发布的构建产物

b11761的发布页面列出多平台预编译包,包括macOS Apple Silicon(arm64)与Intel(x64)、iOS XCFramework、Ubuntu x64/arm64/s390x及Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL FP32与FP16变体、Android arm64、Windows的CPU/CUDA/Vulkan/OpenVINO/SYCL/ROCm构建,以及独立的UI包。

其中macOS Apple Silicon的KleidiAI版本与openEuler系列构建标注为DISABLED。

信息来源

llama.cpp Releases原始来源