llama.cpp 修復 Hexagon DMA 大步長傳輸截斷問題
llama.cpp 修復了 Hexagon NPU 後端 2D DMA 傳輸中步長被截斷的缺陷。在 v75 及以上硬體上,DMA 描述符只用 24 位存 row_size 和 stride;當步長達到 16MB 或更大時會被截斷,導致地址錯誤。修復後,這類情況改為逐行傳輸,並新增兩個源步長超過 16MB 的 CONT 測試。同版本還重構了 fallback 路徑,以去掉重複程式碼。
原標題:b12030
閱讀原文
| 評分 | 40 / 35(平均 37,門檻 60) |
|---|---|
| 狀態 | 未入選 |
原文
相關報導
llama.cpp 修復 Hexagon IM2COL DMA 環形佇列溢位
llama.cpp 建置 b11516 修復了 Hexagon NPU 上 IM2COL patch-embed 的 DMA 環形佇列溢位問題:當 IC*KH 超過 255 時,每執行緒 256 項的 DMA 環寫滿後新描述符被靜默丟棄,導致 VTCM 暫存緩衝的剩餘行未寫入,陳舊資料(常為 NaN/inf)汙染輸出。修復方式是在環滿時淘汰最舊描述符並呼叫 dma_queue_flush() 等待,與同檔案 blocked kernel 的做法一致。
llama.cpp 更新:Hexagon NPU 的 IM2COL 改為分塊多執行緒 HVX 並行
llama.cpp 發布新建置 b11976,重點改進了 Hexagon NPU 後端的 IM2COL:按輸出列分塊,並用 HVX 做多執行緒並行;同時修復 padding 處理,並對常見情形做了迴圈展開。該改動由高通 Max Krasnyansky 共同署名,提交資訊註明由 Claude Opus 5.5 協助。
llama.cpp 更新 Hexagon 後端,預設動態緩衝升至 512MB
llama.cpp b11490 把 Hexagon 後端的預設動態緩衝從 128MB 提升到 512MB,原因是 128MB 在大 MoE 模型上會導致效能退化。hex-bufs 新增 alloc_buffer_n 支援,並可將大張量拆分到獨立緩衝區;環境變數 GGML_HEXAGON_MBUF 改為接受 dyn、static、total 三個值。hex-run 還新增 --no-embd-offload 選項,用於簡化需要該設定的裝置上的命令列。
llama.cpp 提升 Hexagon NPU 轉置 CONCAT 頻寬利用率
llama.cpp 新建置 b11981 最佳化了高通 Hexagon NPU 上轉置 CONCAT 的 DDR 頻寬利用率:把行塊大小翻倍、scratchpad 改為雙緩衝、src1 行分塊處理,並補齊 src1 的 VTCM stride 以分散 gather lane;類似的 vgather 最佳化也應用到 SSM_CONV 和 GDN。
llama.cpp 發布 b11500,修復 hex-mmadd 融合偏置的讀寫對齊假設
llama.cpp 建置版本 b11500 發布,主要變更是 hex-mmadd 在融合 bias-add 時不再假設讀寫記憶體對齊(#30133)。