SiFive Patents(US20230367715A1): Load-Store Pipeline Selection for Vector
| Patents | Inc. | Title |
|---|---|---|
| US20230367715A1 | SiFive | Load-Store Pipeline Selection for Vector. |
背景与针对问题
- RVV 向量指令的操作数长度可能超过单周期内存写入能力,因此需要多拍执行
- 向量 store 指令可能使用 stride 或 index 寻址,导致地址不连续,难以在指令调度时完全确定所有地址
- 处理器中可能有多个 store unit(如 load/store pipeline 和 store-only pipeline)以提升内存写入带宽
存在的问题:
- store 指令的执行策略:
- 通过 L1 Cache 写入内存,带宽有限
- 绕过 L1 Cache 直接写入 L2 Cache,带宽更高,但可能引发 cache invalidation (一致性导致),降低性能
- 如何在不引发缓存一致性问题的情况下,动态选择最优存储单元成为关键
解法
1. 基于第一拍地址的动态选择
在 vector store 指令被调度时,识别出第一拍(first beat)的地址(即第一个元素的目标地址)
根据该地址决定使用哪个存储单元:
- 若该地址在 L1 Cache 中命中,则使用第一存储单元(通过 L1 Cache 写入)
- 若未命中,则使用第二存储单元(绕过 L1 Cache,直接写入 L2 Cache)
2. 使用预测器(Predictor)进行选择
引入一个预测器电路,输入为:
- PC
- 第一拍地址
输出为预测结果:选择第一或第二存储单元
预测器条目通过 PC 与地址的哈希值索引,存储一个饱和计数器
更新机制:
- 若某条指令使用第二存储单元导致 L1 Cache 无效化,则对应计数器减一
- 若指令顺利完成且未引发无效化,则计数器加一
3. 内存映射I/O(MMIO)处理
若第一拍地址属于 MMIO 区域,则强制使用第一存储单元,确保 I/O 操作的顺序性和正确性
4. 处理指令依赖(Hazard Handling)
由于两个存储单元并行执行,可能出现 WAW 或 WAR 冒险
解决方案:
- 强制调度到同一单元:若检测到目标地址冲突,将后续指令调度到同一存储单元,确保顺序执行
- 延迟调度:若冲突存在,延迟后续指令的调度,直到前一条指令完成
All articles on this blog are licensed under CC BY-NC-SA 4.0 unless otherwise stated.