开源llama.cpp Releases·原文 2026年11月4日

llama.cpp b12094优化Hexagon后端采样器的TOP_K计算

该版本将Hexagon后端采样器中TOP_K的整块双调排序改为跳过无效块、再逐块扫描,改动覆盖k在 2 到 64 之间、行宽超过 1024 的单行与多行路径。

AI解读:改动思路是先跳过最大值无法触及当前第k名阈值的tile,再用top_k_scan() 替换tile排序:以一次HVX max-reduce拒绝整块 256 个float,只把通过筛选的元素插入有序的k项列表。

适用条件:k在 2 到 64 之间,且行宽大于 1024,单行路径与多行路径均覆盖。

行为细节:出现并列时保留首次出现的索引;NaN被当作 -INF处理。另有提交移除vtcm的标量读取,PR共同作者为Max Krasnyansky。

发布页同时列出各平台预编译包,包括macOS、iOS、Linux、Android、Windows及openEuler;其中macOS启用KleidiAI的版本与openEuler相关包标注为DISABLED。来源未给出加速比等性能数据。

llama.cpp发布构建b12094,合入PR #31279,改动了Hexagon后端采样器中TOP_K的实现方式。发布说明称目标是让该后端采样器中的TOP_K更快。

TOP_K改了什么

按发布说明,新的做法先跳过那些最大值无法达到当前第k名阈值的tile,不再对它们执行双调排序;随后用top_k_scan() 取代tile排序:先用一次HVX max-reduce拒绝整块 256 个float,只把存活的元素插入一个有序的k项列表。

同一PR还包含一项提交,用于消除vtcm的标量读取。PR共同作者为Max Krasnyansky。

  • 跳过最大达不到当前第k名阈值的tile
  • 用HVX max-reduce整块拒绝 256 个float
  • 仅将存活元素插入有序的k项列表
  • 移除vtcm的标量读取

适用范围与行为边界

代码说明给出的适用范围是k取 2 到 64、行宽大于 1024,单行和多行路径都使用这一实现。并列值保留首次出现的索引;NaN按 -INF处理。

  • k范围:2 到 64
  • 行宽条件:大于 1024
  • 覆盖单行路径与多行路径
  • 并列取首次出现的索引
  • NaN视为 -INF

随版本发布的预编译包

b12094发布页按平台列出预编译产物,涵盖macOS arm64与x64、iOS XCFramework、多个Ubuntu与Linux变体(含CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL,以及面向Snapdragon的CPU/Adreno GPU/Hexagon NPU包)、Android arm64、Windows各类后端包和UI包。

部分条目在发布页标注为DISABLED:macOS Apple Silicon上启用KleidiAI的版本,以及openEuler的 310p与 910b等条目。本次发布说明未提供该优化在Hexagon上的实测加速数据。

  • Linux arm64 Snapdragon包包含CPU、Adreno GPU、Hexagon NPU
  • macOS KleidiAI启用版标注DISABLED
  • openEuler多个包标注DISABLED
  • 未公布性能测量结果

信息来源

llama.cpp Releases原始来源