llama.cpp发布b11574:优化Hexagon后端CPY/CONCAT,修复mdev随机挂起
llama.cpp发布b11574版本,合并PR #30341,针对高通Hexagon NPU后端的拷贝与拼接操作做第三轮优化,并修复多设备场景下的随机挂起问题。
AI解读:PR #30341 的优化方向是让转换型拷贝按行分块提交给DMA描述符,避免短行受DMA延迟拖累;提交信息将此定位为针对short-rows的第三轮修改。
同一PR还调整了CPY/CONCAT的多项细节,包括为f16增加快速路径、支持 3/4 维折叠、引入双缓冲、减少标量除法与寄存器溢出,并让内核参数去重;这些改动是否带来端到端提速,提交信息未给出基准数据。
改动中有一项被明确标注为修复:将mdev场景下关键的vtcm_acquire同步状态改为原子操作,提交信息称这修复了mdev环境中的随机挂起。
构建方面新增了仅构建或安装Hexagon组件的支持;发布页同时列出macOS、iOS、Linux、Android、Windows与openEuler等平台的预编译产物,其中部分后端标注为DISABLED。
llama.cpp发布b11574版本,其中包含PR #30341,标题为“hexagon: optimize CPY/CONCAT — round 3, short-rows edition”。该PR由Ruslan Karymov和Yiwei Shao共同参与署名。
提交说明称,本轮优化把转换型拷贝按行分块送入每个DMA描述符,目的是让短行不再受DMA延迟限制。
提交说明还称,mdev场景下将关键的vtcm_acquire同步状态改为原子操作,修复了mdev环境中的随机挂起。
Hexagon后端CPY/CONCAT的第三轮改动
PR #30341 的提交列表集中在Hexagon后端的拷贝与拼接路径上。除按行分块提交DMA描述符外,还包括清理拷贝游标处理、引入线程化的DMA/HVX行收集辅助函数、移除对扩展缓冲区的遗留拒绝逻辑、放宽快速路径门限、去除标量除法与VTCM访问并改用显式gather_sync、为f16增加快速路径、支持 3/4 维折叠、加入双缓冲、将gather-rows拆分为独立操作、对内核参数去重,以及在尺寸不匹配时逐级下调nr而不是直接失败。
- 按行分块提交DMA描述符,目标是让短行不受DMA延迟限制
- 为f16增加快速路径
- 支持 3/4 维折叠与双缓冲
- 去除标量除法,减少标量寄存器溢出和函数调用
- 内核参数去重;nr不匹配时逐级下调而非硬失败
mdev挂起修复与构建选项
提交列表末尾标注了一条修复:将mdev场景下所有关键的vtcm_acquire同步状态改为原子操作,提交信息称这修复了mdev设置中的随机挂起。
构建方面,提交说明称新增了对只构建和安装Hexagon组件的支持。
- vtcm_acquire同步状态改为原子操作,提交信息称修复mdev随机挂起
- 新增仅构建/安装Hexagon的支持
发布产物与平台覆盖
发布页列出了b11574在各平台的预编译产物,包括macOS Apple Silicon(arm64)与Intel(x64)、iOS XCFramework、Ubuntu的x64/arm64/s390x CPU版以及Vulkan、CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、SYCL FP32/FP16版本、Linux arm64 Snapdragon(CPU、Adreno GPU、Hexagon NPU)、Android arm64(含Snapdragon版本)、Windows的CPU、OpenCL Adreno、CUDA 12.4/13.4、Vulkan、OpenVINO、SYCL、ROCm 10.0版本,以及UI包。
发布页同时标注:macOS Apple Silicon的KleidiAI版本为DISABLED,openEuler的x86 310p、x86 910b ACL Graph、aarch64 310p、aarch64 910b ACL Graph产物均为DISABLED。
- macOS Apple Silicon(arm64,KleidiAI启用版)标注为DISABLED
- openEuler各产物标注为DISABLED
- Linux与Android的Snapdragon产物同时包含CPU、Adreno GPU与Hexagon NPU