llama.cpp发布b11981:优化Hexagon NPU转置CONCAT的DDR带宽利用
该版本由Max Krasnyansky参与提交,改动集中在Hexagon后端转置CONCAT与vgather两类算子:加大行块与暂存缓冲、对src1做分行分块、对VTCM步长补位以分散gather通道,并将vgather优化扩展到SSM_CONV和GDN。发布页同时照常提供各平台构建产物下载。
AI解读:本次改动针对的是Hexagon(高通骁龙平台NPU)后端的算子实现,不是llama.cpp全部后端的通用优化。发布说明只列出改动项,未给出带宽利用率或推理速度的具体提升数字。
优化分两类:一是转置CONCAT,做法包括将行块大小翻倍、暂存缓冲翻倍、对src1行做分块、对src1的VTCM步长补位以分散gather通道;二是vgather,把类似的vgather优化应用到SSM_CONV和GDN。
需要区分适用范围:发布说明没有说明这些优化对哪些模型、哪些量化格式或哪些骁龙型号生效,也没有说明是否影响非Hexagon后端。现有信息只能支持“Hexagon后端这两类算子被改动”这一范围。
b11981是构建编号,发布页由github-actions[bot] 生成,附有macOS/iOS、Linux、Android、Windows等各平台二进制或库的下载链接,其中部分平台标注为DISABLED(如macOS KleidiAI、openEuler)。
llama.cpp发布b11981版本。该版本的主要改动由提交 #31277 带入,提交说明为“hexagon: improve DDR bw utilization in transposed CONCAT”,即提升Hexagon后端转置CONCAT的DDR带宽利用率,提交者中包含Max Krasnyansky。
发布页由github-actions[bot] 生成,除说明改动外,同时提供macOS/iOS、Linux、Android、Windows等平台的构建产物下载链接;部分平台在页面中被标记为DISABLED。
转置CONCAT的四项调整
提交说明把转置CONCAT的改动拆为四点:将行块大小翻倍(double row block size)、将暂存缓冲翻倍(double buffer scratchpads)、对src1行做分块(chunked src1 rows),以及把src1的VTCM步长补位以分散gather通道(pad src1 VTCM stride to spread gather lanes)。这些改动的目标是让数据搬运更充分地利用DDR带宽。
- double row block size for transposed CONCAT
- double buffer scratchpads
- chunked src1 rows in transposed concat
- pad src1 VTCM stride to spread gather lanes
vgather优化扩展到两个算子
同一提交还将类似的vgather优化应用到SSM_CONV和GDN两个算子,提交说明中的表述为“hex-vgather: apply similar vgather opts to SSM_CONV and GDN”。发布说明未展开这两处改动的具体实现细节。
构建产物与平台状态
b11981的发布页列出多平台下载,覆盖macOS Apple Silicon与Intel、iOS XCFramework、Ubuntu(x64/arm64/s390x,含CUDA 12.8、CUDA 13.4、ROCm 10.0、OpenVINO、Vulkan、SYCL等变体)、Linux arm64骁龙版(CPU、Adreno GPU、Hexagon NPU)、Android arm64、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm、OpenCL Adreno等)以及UI包。
页面中macOS Apple Silicon的KleidiAI启用版与openEuler各构建被标注为DISABLED。发布页未说明这些构建被禁用的原因。
- macOS Apple Silicon(arm64, KleidiAI enabled):DISABLED
- openEuler x86/aarch64的 310p与 910b构建:DISABLED
- 骁龙平台提供CPU、Adreno GPU、Hexagon NPU三种后端对应的构建包