llama.cpp b12030修复Hexagon DMA大跨距传输截断问题
llama.cpp发布b12030版本,修复了Hexagon后端在v75+硬件上处理 16 MB及以上跨距时DMA地址被截断的问题,改为逐行传输回退,并新增两个跨距超 16 MB的CONT测试。
AI解读:这次修复针对的是Hexagon后端在v75及以上版本硬件上的 2D DMA传输:这些硬件只把row_size和步长(stride)存进 24 位字段,超出部分会被截断。
触发条件是stride达到 16 MB或更大。此前dma_queue_push会把超大stride交给fallback_2d处理,而该回退路径只拆分nrows,不处理stride,于是地址被错误截断,传输会写到错误地址。
修复方式是在该情况下改为每行单独发一次传输;提交信息称同时重构了Hexagon DMA的回退路径以去除重复代码,并新增两个源跨距超过 16 MB的CONT测试。
适用对象是使用Hexagon NPU后端的llama.cpp用户,发布页给出了Snapdragon平台的Linux arm64与Android arm64构建包(含CPU、Adreno GPU、Hexagon NPU)。
发布说明由仓库自动发布账号github-actions[bot] 发布,提交由Max Krasnyansky共同署名;除测试新增外,来源未给出实际推理性能或兼容性数据。
llama.cpp发布b12030版本,其中一项Hexagon后端修复(PR #31442)处理了DMA传输中跨距超过 24 位表示范围的问题。
提交说明称,在v75+硬件上,2D DMA描述符用 24 位存储row_size和stride。dma_queue_push会把过大的stride交给fallback_2d,而该回退路径只拆分nrows,因此 16 MB及以上的stride会被截断,导致地址错误。
修复方案是在这种情况下回退为每行一次传输,同时重构了Hexagon DMA的回退路径以减少重复代码。提交还新增了两个源跨距超过 16 MB的CONT测试。
该提交由Max Krasnyansky共同署名。发布页同时列出了各平台构建包,其中含Snapdragon的Linux arm64与Android arm64包,覆盖CPU、Adreno GPU和Hexagon NPU。