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

llama.cpp b11703将Hexagon后端softplus运算改用HVX向量化

该版本把softplus_f32与tile_softplus_f32中逐元素执行的logf(1.0f + expf(x)) 标量循环,替换为基于既有hvx_vec_exp_f32、hvx_vec_log_f32 primitive的共享HVX辅助函数;发布说明称未引入新的数值近似。

AI解读:llama.cpp发布b11703版本,Hexagon后端的softplus_f32与tile_softplus_f32由标量循环改为HVX向量化实现。

发布说明称,新实现复用后端已有的hvx_vec_exp_f32与hvx_vec_log_f32,未引入新的数值近似;hvx_vec_exp_f32在取指数前把输入限制在 (-88, 88),直接组合log(1+exp(x)) 在大x时会饱和到约 88.72,而不是返回x。

实现中的Q6_V_vmux_QVV选择保留标量参考实现(ggml-impl.h中的ggml_compute_softplus_f32)的x > 20 保护条件,发布说明称这是向量路径与CPU结果一致的原因。

本次改动由Claude辅助完成(Assisted-by: Claude)。发布页同时提供macOS、iOS、Linux、Android、Windows等多平台预编译包下载,其中部分条目(KleidiAI启用版、openEuler)标注为DISABLED。

llama.cpp发布b11703版本,将Hexagon后端的softplus计算从标量循环改为HVX向量化。据发布说明,softplus_f32与tile_softplus_f32原先逐元素执行logf(1.0f + expf(x)),现在共用新增的hvx_softplus_f32_aa() 辅助函数。

改动内容与数值处理

发布说明称,hvx_softplus_f32_aa() 由后端已有的hvx_vec_exp_f32和hvx_vec_log_f32两个primitive组合而成,因此没有引入新的数值近似。

发布说明解释了为何不能直接组合log(1+exp(x)):hvx_vec_exp_f32在取指数前把输入限制在 (-88, 88),大x时结果会饱和到约 88.72,而不会返回x。实现使用Q6_V_vmux_QVV选择,保留标量参考实现(ggml-impl.h中的ggml_compute_softplus_f32)的x > 20 保护条件;发布说明称,这是向量路径与CPU结果一致的原因。

发布说明标注该改动Assisted-by: Claude。

  • softplus_f32与tile_softplus_f32原先为标量logf(1.0f + expf(x)) 循环
  • 新实现共用hvx_softplus_f32_aa(),基于hvx_vec_exp_f32 / hvx_vec_log_f32
  • 保留x > 20 保护条件以匹配ggml_compute_softplus_f32的CPU结果
  • 发布说明称未引入新的数值近似

发布包范围

b11703发布页列出macOS、iOS、Linux、Android、Windows的预编译包,涵盖CPU、Vulkan、CUDA 12与 13、ROCm 10.0、OpenVINO、SYCL等构建;Snapdragon平台另提供含CPU、Adreno GPU、Hexagon NPU的Linux arm64与Android arm64包。openEuler条目与启用KleidiAI的macOS Apple Silicon条目标注为DISABLED。

  • Linux构建包含Ubuntu x64/arm64/s390x CPU、Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、SYCL FP32/FP16
  • Snapdragon专用包覆盖Linux arm64与Android arm64的CPU、Adreno GPU、Hexagon NPU
  • openEuler与KleidiAI启用版条目标注DISABLED

信息来源

llama.cpp Releases原始来源