llama.cpp b11647为AMD端Vulkan后端增加f16/bf16 KV跨步拷贝
该版本在AMD上把跨步的f16 KV先拷贝到scratch,使跨步访问落在顺序写入上,避免读取集中到少数内存通道;同一改动后续扩展到bf16,并在RDNA4上禁用。
AI解读:这次改动的具体问题是:Vulkan后端在AMD上处理跨步f16 KV时,若按原顺序访问,跨步读会集中落在少数内存通道。改动把KV先做一次跨步拷贝到scratch,拷贝按源内存顺序描述,于是跨步访问作用在顺序流式的写入上,而不是读取上。
实现上,f16分支只需要跨步拷贝、不需要反量化,所以作者删掉了专用shader,改用已有的通用拷贝管线;之后同一个跨步KV scratch拷贝又扩展到了bf16。这些细节来自提交信息和发布说明,不是第三方复现的评测结果。
适用范围有明确限制:该优化被限定在AMD上启用,发布说明同时注明在RDNA4上禁用。其他厂商的Vulkan设备、以及非Vulkan后端是否受此改动影响,来源没有说明。
提交信息标注了Assisted-by: Claude(Opus 4.8 / Opus 5 / Fable 5),共同作者为Ruben Ortlam。这是提交记录的归属说明,不代表对改动效果做过独立验证。
发布页照例列出了b11647在各平台的预编译包,包括Ubuntu的Vulkan x64/arm64、Windows的Vulkan x64/arm64等;其中macOS Apple Silicon的KleidiAI版和openEuler相关构建标注为DISABLED。来源没有给出性能提升数字或对比基准。
llama.cpp发布b11647,其中一项Vulkan后端的改动针对AMD:把跨步的f16 KV先拷贝一次到scratch,让跨步访问落在顺序写入上,而不是让读取集中到少数内存通道。
提交信息显示,该改动后续把跨步KV scratch拷贝扩展到bf16,并将f16 KV scratch拷贝限定在AMD上;发布说明同时注明在RDNA4上禁用。
改动做了什么、针对什么问题
提交说明描述的问题是:跨步f16 KV若按原先的方式访问,跨步读取会集中落在少数内存通道上。改动把这个跨步KV做一次拷贝写入scratch,拷贝按源内存顺序描述,于是跨步访问作用于顺序流式的写入,而不是读取。
实现上,f16分支只需要跨步拷贝、不需要反量化,因此作者去掉了专用shader,改为调度已有的通用拷贝管线;该改动随后扩展到了bf16。
- 把跨步f16 KV拷贝一次到scratch,使跨步访问落在写入而非读取上。
- 用通用拷贝管线替换f16专用shader,因为f16只需跨步拷贝、不需要反量化。
- 后续提交把同一跨步KV scratch拷贝扩展到bf16。
适用条件与限制
该优化在AMD上启用,并在RDNA4上禁用。提交记录中的步骤也显示,作者先把f16 KV scratch拷贝gate到AMD,随后又加上RDNA4的禁用。
发布页以外,来源没有给出性能数字、基准对比或对非AMD Vulkan设备、其他后端的适用范围说明。
- 启用范围:AMD。
- RDNA4上禁用。
- 来源未提供性能提升幅度或基准测试数据。
归属与版本信息
提交信息标注Assisted-by: Claude(Opus 4.8 / Opus 5 / Fable 5),共同作者为Ruben Ortlam。这是提交记录的署名,并非对效果的外部验证。
b11647发布页照例列出各平台预编译产物,包括Ubuntu的Vulkan x64/arm64、Windows的Vulkan x64/arm64等;macOS Apple Silicon的KleidiAI版和openEuler相关构建标注为DISABLED。
- 提交标注Assisted-by: Claude,共同作者Ruben Ortlam。
- Ubuntu Vulkan x64/arm64、Windows Vulkan x64/arm64等预编译包随版本发布。
- macOS Apple Silicon KleidiAI版与openEuler构建标注为DISABLED。