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

llama.cpp b12064为Hexagon后端新增分块HVX转置路径,加速通道置换拷贝

该版本为同类型、同形状的f32/f16置换拷贝新增HTP_COPY_KERNEL_TRANSPOSE,用于替代此前逐元素下发DMA描述符的回退路径;提交说明称,视频VAE中 [W,H,T,C] 与 [C,W,H,T] 之间的通道优先/通道最后置换拷贝此前速度约为 45 MB/s。

AI解读:llama.cpp发布b12064,Hexagon后端新增分块HVX转置路径,针对“目标第 0 维在源中跨步、但源另有连续维”的置换CONT/CPY拷贝。

提交说明称,这类拷贝此前回退到HTP_COPY_KERNEL_RESHAPE,每个元素下发一个DMA描述符,围绕逐通道归一化的通道优先到通道最后置换(如视频VAE中的 [W,H,T,C] 与 [C,W,H,T])走该路径时速度约为 45 MB/s。

新增的HTP_COPY_KERNEL_TRANSPOSE只适用于同类型、同形状、写入连续目标的f32/f16拷贝;其他拷贝仍选择原有内核。

主机侧会去掉长度为 1 的维度、合并源中保持相邻的维度,形成规范视图;分块按每缓冲区 64 KB设定,放不进会话VTCM时减半,blkk设上限以使半字vgather偏移落在 16 位内。

内核按块执行:二维DMA将跨步源行搬入VTCM,再按 32×32(f32)或 64×64(f16)块做vgather转置,最后二维DMA写出;输入、转置和输出缓冲双缓冲,下一块的输入DMA与当前转置、输出重叠,分块跨线程和mdev会话拆分。

测试新增perms {1,2,3,0}、{3,0,1,2} 及dim_k == 3 的CONT用例、ne[0] == 1 的permute CPY用例,覆盖f32/f16多种尺寸;提交注明Assisted-by: Claude Opus 5.5,并列出Max Krasnyansky、Yiwei Shao等共同作者。

llama.cpp发布b12064版本,Hexagon后端合入提交 #31446,为置换型CONT/CPY拷贝新增分块HVX转置路径HTP_COPY_KERNEL_TRANSPOSE。提交说明称,这类拷贝此前回退到HTP_COPY_KERNEL_RESHAPE,每个元素下发一个DMA描述符,视频VAE中 [W,H,T,C] 与 [C,W,H,T] 之间的通道置换拷贝速度约为 45 MB/s。

新路径的适用范围与主机侧处理

新增内核只处理同类型、同形状、写入连续目标的f32/f16拷贝。主机侧会去掉长度为 1 的维度,并把在源中保持相邻的维度合并为规范视图,存入内核参数;提交说明称没有最小尺寸限制。

拷贝被当作目标第 0 维与源连续维之间的二维转置,其余维度作为批次。分块按每缓冲区 64 KB设定,放不进会话VTCM时逐次减半;blkk设上限,使半字vgather偏移能放入 16 位。

内核执行与小尺寸分支

每个分块内,先用二维DMA把blk0条跨步源行(每行blkk个连续元素)搬入VTCM,再以 32×32(f32)或 64×64(f16)块做vgather转置,最后用二维DMA将blkk条连续行写出。暂存与转置缓冲采用双缓冲,使下一块的输入DMA与当前转置、输出DMA重叠;分块跨线程和mdev会话拆分。

小尺寸有两种处理:当维k紧随维 0、且维 0 能整除HVX通道数(f32为 2/4/8/16,f16为 2/4/…/32)时进入packed模式,一次vgather写出多条完整目标行,每块以一次连续DMA输出;当源连续维能放进一个向量时,按精确尺寸暂存,并沿维 0 拉长分块。其他拷贝仍走原有内核。

测试与署名

提交新增test_cont用例,覆盖perms {1,2,3,0} 和 {3,0,1,2} 的f32/f16多种尺寸,并加入dim_k == 3 的CONT测试(完全反转)以及ne[0] == 1 的permute CPY测试。后续清理包括修正vgather半字偏移注释、在packed情形直接设置标志、去掉转置求解器中的nb[0] 检查。

提交注明Assisted-by: Claude Opus 5.5,共同作者包括Max Krasnyansky和Yiwei Shao;其中提到引入自aizip分支/PR的改进,用fastdiv替换除法并避免VTCM bank冲突。

信息来源

llama.cpp Releases原始来源

更多

新闻专题
外观