llama.cpp b11906将ggml-cpu的concat改为统一行内核
该版本把concat在ggml-cpu后端重写为单一内核,覆盖所有数据类型,并新增转置b的测试用例与性能用例;发布页同时列出各平台预编译包。
AI解读:llama.cpp发布b11906,主要变更是ggml-cpu后端把concat重写为一个行内核,覆盖所有类型。
按发布说明,目标行来自src0或src1;dim 0时取src0的一行接上src1的一行,因此单个内核可处理全部类型。
密集源行按一次memcpy复制,量化类型也包含在内;跨步源则逐元素复制,元素大小在编译期已知。
行改为跨线程切分,不再只按i2切分(i2常为 1),并以 32 为一块复制;对转置源改在外层循环遍历元素,使同一块内的行读取相邻地址,而非每个元素跳过一个完整行跨度。
测试方面,test_concat新增转置b的用例,对应delta-net卷积输入的布局,并添加了该场景的性能用例。
发布页提供macOS、iOS、Linux、Windows、Android等平台的预编译包;macOS Apple Silicon的KleidiAI版本与openEuler包标注为DISABLED(已禁用)。
llama.cpp发布版本b11906,核心改动在ggml-cpu后端:concat被重写为单一的行内核,覆盖所有数据类型(PR #31179)。
concat内核的适用范围与实现方式
发布说明称,每个目标行都来自src0或src1;在dim 0的情况下,目标行由src0的一行接上src1的一行组成。正因如此,单个内核就能覆盖全部类型。
实现上,密集源行按一次memcpy复制,量化类型同样适用;跨步源则逐元素复制,元素大小在编译期确定。行被分配到多个线程上,不再只按i2切分(i2常为 1),并以 32 为一块复制。对转置源,元素遍历放在外层循环,使同一块内的行读取相邻地址,而不是每个元素跳过一个完整行跨度。
新增测试与构建产物
- test_concat增加转置b的用例,对应该改动说明中提到的delta-net卷积输入布局。
- 同时为该场景添加了一个性能用例。
- b11906发布页列出macOS Apple Silicon、macOS Intel、iOS XCFramework、Ubuntu(CPU、Vulkan、CUDA 12/13、ROCm 10.0、OpenVINO、SYCL)、Windows(CPU、CUDA、Vulkan、OpenVINO、SYCL、ROCm)、Android及Snapdragon等预编译包。
- macOS Apple Silicon的KleidiAI启用版本标注为DISABLED,openEuler相关构建同样标注为DISABLED。