在 RISC-V Vector Extension(RVV)的設計中,大多數指令都只涉及 VRF(vector register file)。不過,有些指令會寫入 XRF(整數暫存器檔),這類指令設計與應用上都需要特別處理,尤其在 RTL writeback 或 control flow 上具有實際影響。
會寫入 XRF 的 RVV 指令
| 指令 | 功能說明 |
|---|---|
| vsetvli | 設定 Vector 長度與類型,結果寫入 rd |
| vsetivli | 和 vsetvli 類似,但用立即數 |
| vcpop.m | 統計 mask 向量中有幾個 bit 是 1 |
| vfirst.m | 找出 boolean vector 第一個為 1 的 index |
| vmfirst.m | 找出 mask 第一個為 1 的 index |
學習心得
- vcpop.m、vfirst.m 等是 vector-to-scalar 的 reduction 指令,會將計算結果輸出到 x register。
實際應用場景
- 條件篩選與 Early Exit:
- vfirst.m 可快速判斷向量中是否有符合條件的元素,例如判斷第一個非零結果在哪裡。
- 搭配 beq x6, -1, exit 這類控制語句,可實現 SIMD-aware 的條件分支。
- 結果收斂與摘要統計:
- vcpop.m 可計算 mask 中符合條件的總數,例如「大於閾值的 pixel 數量」、「通過篩選的 item 數量」。
結語
RVV 中會寫 XRF 的指令不多,但每一個都與 控制邏輯 或 scalar decision 有關。對 RTL 實作者來說,這些指令是少數需要打通 X 路徑的 case;對軟體開發者來說,它們是讓 vector 運算能與分支邏輯整合的關鍵工具。

發表留言