llama.cpp 為 Hexagon NPU 新增 conv2d 支援
llama.cpp 建置 b11970 為高通 Hexagon NPU 後端加入 conv2d 與深度卷積(CONV_2D_DW)運算元支援,並更新 softmax 門控以啟用 mmproj 多模態投影。改動採用隱式 GEMM、雙緩衝 DMA 暫存與流水線重構,移除了標量和 HVX 分塊路徑,並在存入 f16 前對 HMX 結果縮放以避免溢位。
原標題:b11970
閱讀原文
| 評分 | 48 / 48(平均 48,門檻 60) |
|---|---|
| 狀態 | 未入選 |
原文
相關報導
llama.cpp Hexagon 後端為二進位制運算元擴充套件標量 DMA 廣播支援
llama.cpp 發布 b11580 建置,Hexagon 後端為二進位制運算元擴充套件了標量 DMA 廣播支援,並刪除全部非 DMA 路徑,同時新增對非連續 stride 的處理。REPEAT 與 COMPLEX 核心這次也改用 DMA,hex-add-id 為 src2 索引加法補上 DMA;hex-geglu-erf 新增僅 F32 的門控,該運算元不支援 F16。
llama.cpp 為 Hexagon NPU 加入 Q1_0 與 Q2_0 量化支援
llama.cpp 建置 b11716 為高通 Hexagon NPU 新增 Q1_0、Q2_0 兩種低位元量化的支援,其中 Q1_0 權重已可在 2D HMX MUL_MAT 路徑中啟用。同一批提交還改寫了分塊(tiling)實現、去掉迴圈內除法、最佳化 Q1_0 佈局以降低解包與 vrmpy 開銷,並修正 MUL_MAT_NX 對正方形分塊的假設,因為 Q1/Q2 使用非正方形分塊。
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 轉置 CONCAT 頻寬利用率
llama.cpp 新建置 b11981 最佳化了高通 Hexagon NPU 上轉置 CONCAT 的 DDR 頻寬利用率:把行塊大小翻倍、scratchpad 改為雙緩衝、src1 行分塊處理,並補齊 src1 的 VTCM stride 以分散 gather lane;類似的 vgather 最佳化也應用到 SSM_CONV 和 GDN。
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 選項,用於簡化需要該設定的裝置上的命令列。