【香山双周报 110】20260902 期
欢迎来到香山双周报专栏,我们将通过这一专栏定期介绍香山的开发进展。本次是第 110 期双周报。
关于香山近期开发进展,前端修复了多个分支预测与取指问题,并优化了 uBTB 训练及 IFU/ICache 时序;后端推进了 V3 寄存器堆相关重构;访存与缓存修复了多个问题,并继续推进 V3 开发;XSAI 修复了矩阵译码、访存和操作数唤醒问题,并完善了 DiffTest 与 CI;基础设施方面,增强了 FPGA DiffTest、NEMU/QEMU checkpoint 以及 GSIM 构建和仿真能力,并持续推进 XS-GEM5 模型对齐和性能探索。
社区贡献者 muke101 通过 GitHub Issue 向我们提供了 PHAST 内存依赖预测算法的gem5 开源实现,在此特别致谢。XS-GEM5 在该实现基础上进行了进一步的重构与优化。
同时向大家预告一则消息:香山团队将联合新加坡国立大学的 Trevor E. Carlson 教授,在希腊举行的 MICRO 2026 会议期间举办题为 Agile Development and Verification for Chips 的专题研讨会(workshop)。研讨会定于 10 月 31 日举行,现面向社区公开征稿。欢迎访问投稿网站(https://workshop.xiangshan.cc)了解详情并投稿,期待届时与大家相聚希腊,共同交流与探讨!
近期进展
前端
- Bug 修复
- 修复前端对 canonical PC 地址的检查,并增加相关仿真测试(#6340)
- 在 IFU redirect 的
canTrain条件中补充notCfiTaken信号(#6398) - 在 TAGE 重置 useful counter 时清空待处理的写请求,避免旧请求覆盖重置结果(#6377)
- 修复 TAGE 使用 base prediction 时重复读取预测表的问题(#6356)
- 修复 BPU S1 和 S3 均预测 not taken 时可能误触发
s3_override的问题(#6417) - 使用训练访问而非预测访问更新 BTB 替换状态(#6348)
- 性能优化
- 按预测表的训练状态维护
UseAltOnNa,降低分支别名干扰和寄存器开销(#6328) - 同时使用 resolve 和 fast train 路径训练 uBTB,减少错误预测重定向后的额外气泡(#6237)
- PPA 优化
- 提前计算
t0_firstMispredictMask,优化 FTQ 到 BPU train cache 的写入时序(#6375) - 移动 pre-decode 和
maybeRvc逻辑并寄存 ICache 数据,优化 IFU/ICache 指令对齐路径时序(#6220) - 代码重构
- 将
vtype生成逻辑从 Decode 移至 IBuffer,使每条指令携带对应的vtype和specvtype(#6376) - 使用 PNR 指针判断 2-prefetch 和 2-fetch 条件,替代与 BPU 指针间的固定距离判断(#6378)
后端
- 代码重构
- 使用物理寄存器索引的低位作为 banked regfile 的 bank index,均衡各 bank 的条目分配,并避免末个 bank 为空时编译失败(#6357)
- 将
vtype生成逻辑从 Decode 移至 IBuffer,使每条指令携带对应的vtype和specvtype进入后端(#6376)
访存与缓存
- RTL 新特性
- 将 openLLC 容量配置扩大到 32 MB(#6401)
- 实现并集成独立的 L3 stash 预取路径,包括 L1 侧桥接、CHI StashOnceShared 请求及 openLLC stash refill 处理(XSCache #25、#6274)
- 新增 TLB、请求过滤器、PTW 和 L2TLB 完成路径的性能计数器,并修正 PageCache 命中统计条件(#6383)
- 新增 F-POP L2 预取反馈控制器,根据命中、延迟、污染和竞争反馈调节各类预取器(XSCache #24)
- Bug 修复
- 对齐前端与 MemBlock 的 CSR 变更 TLB flush 延迟,避免旧 epoch 的 PTW 请求跨越 flush 边界(#6421)
- 修复 L3 预取接收端口的生成条件,并在编码前检查普通 MSHR TxnID 是否侵入 stash 预留空间(XSCache #28)
- 修复非最老的跨页非对齐 store 注入 tail 请求后持续阻塞最老请求所导致的死锁(#6382)
- 补齐预取请求使能向量,使六个预取器的请求使能保持同步(XSCache #27)
- 仅在 MissEntry 请求有效时允许 secondary miss 合并(#6308)
- (V2)在 VSegment 接管 DCache load port 0 时终止尚未完成的硬件预取请求(#6389)
- 时序优化
- 将 DCache WritebackQueue 的 release 仲裁从轮询策略改为最低索引优先策略(#6379)
XSAI
- Bug 修复
- 修复 MLCT 转置数据布局和 MSC/MSCT 的 C MatrixReg 读地址(XSAI #106、CUTE #38)
- 修复
msetcfg/mgetcfg误译码(XSAI #107) - 修复矩阵访存
AccessAckData响应与 HintQueue 状态不同步问题(XSAI #110、XSAICache #6) - 修复 Mx 操作数延迟写回漏唤醒导致 MLS 指令永久阻塞的问题(XSAI #111)
- 代码质量
- 清理未使用的矩阵提交和调度反馈接口(XSAI #113)
- 优化 CI:并行化 EMU 与 nightly 回归(XSAI #114、XSAI #116)
- 调试工具
- DiffTest 支持 AME
mcfg状态对比(XSAI #107、difftest #944、NEMU #1172) - 支持 16-byte store checker 事件(XSAI #112)
- 处理 MMA 操作数获取失败,并改进 AMU 事件诊断(difftest #926、difftest #927)
基础设施
- FPGA DiffTest
- 支持运行时动态配置 CPU AXI 各通道延迟(difftest #950)
- 修复 DiffTest Squash 数据通路重复握手问题(difftest #946)
- 支持 FPGA 过滤调试价值低、面积开销大的验证信号(difftest #948)
- FPGA 划片约束支持 OpenLLC,并更新昆明湖 flash 初始化固件(env-scripts #162)
- 修复 FPGA 跨片路径及时钟异步路径约束,支持按固定 CPU/RTC 比例调整运行时钟频率(env-scripts #159、env-scripts #161)
- NEMU 参考模型
- 在 CI 中增加 nexus-am RVH 裸机回归测试(NEMU #1162)
- 修复 RVH final TLB 命中时未恢复 MBMC 页表层级的问题(NEMU #1171)
- 修复 Linux 开启 THP 时,按地址执行
SFENCE.VMA未完整失效大页对应 HostTLB 条目的问题(NEMU #1175) - 切片
- 开启 Linux THP 透明大页模式,提升部分 workload 的性能(workload-builder #54)
- QEMU 支持 UART16550 串口,并与香山平台的串口地址及参数对齐(qemu #17)
- libcheckpoint 支持配置串口地址(LibCheckpoint #27)
- 改进 QEMU profilingv2 插件,通过
nemu_trap显式启动 profiling,提速 23%(qemu #16) - 优化 NEMU SimPoint profiling 热路径,提速约 20%(NEMU #1178)
- GSIM 仿真器
- 新增
--threads参数控制 FIRRTL 解析器工作线程数,并根据进程可用 CPU 数量限制线程上限(gsim #119) - 完善 CI 与发布流程,引入 Dependabot、统一依赖安装,并支持多 LLVM 版本及 ARM64 构建(gsim #121)
- 优化一维数组赋值的代码生成,在满足条件时使用
memcpy替代逐元素复制,显著降低生成代码的编译耗时(gsim #125)
XS-GEM5
- 模拟器对齐
- CDP 预取配置对齐(XS-GEM5 #1060)
- BPU S1 行为对齐(XS-GEM5 #980)
- 2-fetch 对齐(XS-GEM5 #1072)
- Virtual StoreQueue 对齐实现(XS-GEM5 #991)
- LSU 可参数化配置代码重构(XS-GEM5 #1042)
- 新特性探索
- MDP 算法 PHAST(XS-GEM5 #1008)
- SMT:一拍同时预测两个线程的 fetch_block(XS-GEM5 #1052)
- PairTAGE(2Taken)实现(XS-GEM5 #830)
- 基础设施
- 优化预取调度,提升模拟器速度(XS-GEM5 #1071)
- 优化 ROB 及 FTQ 代码,提升模拟器速度(XS-GEM5 #1067)
- CI 维护,更新至 GCC16 相关切片(XS-GEM5 #1064)
- CI 维护,新增 ASan 及 UBSan 的冒烟测试(XS-GEM5 #1073)
性能评估
处理器及 SoC 参数如下所示:
| 参数 | 选项 |
|---|---|
| commit | 53a957667 |
| 日期 | 2026/08/21 |
| L1 ICache | 64KB |
| L1 DCache | 64KB |
| L2 Cache | 2MB |
| L3 Cache | 16MB |
| 访存单元 | 3ld2st |
| 总线协议 | CHI |
| 内存配置 | DDR4-3200 |
性能数据如下所示:
| SPECint 2006 @ 3GHz | GCC16 | XSCC | SPECfp 2006 @ 3GHz | GCC16 | XSCC |
|---|---|---|---|---|---|
| 400.perlbench | 55.02 | 53.33 | 410.bwaves | 123.07 | 105.77 |
| 401.bzip2 | 29.89 | 30.60 | 416.gamess | 58.70 | 55.81 |
| 403.gcc | 58.27 | 41.61 | 433.milc | 71.84 | 68.77 |
| 429.mcf | 72.01 | 62.81 | 434.zeusmp | 77.33 | 67.78 |
| 445.gobmk | 43.70 | 42.34 | 435.gromacs | 40.04 | 35.10 |
| 456.hmmer | 54.59 | 67.12 | 436.cactusADM | 85.01 | 93.51 |
| 458.sjeng | 41.66 | 41.74 | 437.leslie3d | 61.20 | 61.31 |
| 462.libquantum | 138.17 | 305.05 | 444.namd | 44.25 | 45.26 |
| 464.h264ref | 69.92 | 75.51 | 447.dealII | 64.71 | 79.14 |
| 471.omnetpp | 48.18 | 47.76 | 450.soplex | 59.78 | 72.28 |
| 473.astar | 33.06 | 32.50 | 453.povray | 78.25 | 73.65 |
| 483.xalancbmk | 85.35 | 92.62 | 454.Calculix | 41.80 | 40.77 |
| GEOMEAN | 55.75 | 58.70 | 459.GemsFDTD | 74.41 | 73.41 |
| 465.tonto | 55.70 | 37.80 | |||
| 470.lbm | 127.10 | 146.69 | |||
| 481.wrf | 58.65 | 44.97 | |||
| 482.sphinx3 | 61.39 | 64.02 | |||
| GEOMEAN | 66.14 | 63.98 |
编译参数如下所示:
| 参数 | GCC16 | XSCC |
|---|---|---|
| 编译器 | gcc16 | xscc |
| 编译优化 | O3 | O3 |
| 内存库 | jemalloc | jemalloc |
| 指令集配置 | 基于 RVA23(禁用向量扩展) | RV64GCB |
| -ffp-contraction | fast | fast |
| 链接优化 | -flto | -flto |
| 浮点优化 | -ffast-math | -ffast-math |
| -mcpu | - | xiangshan-kunminghu |
注:我们使用 SimPoint 对程序进行采样,基于我们自定义的 checkpoint 格式制作检查点镜像,Simpoint 聚类的覆盖率为 100%。上述分数为基于程序片段的分数估计,非完整 SPEC CPU2006 评估,和真实芯片实际性能可能存在偏差。
相关链接
- 香山技术讨论 QQ 群:879550595
- 香山技术讨论网站:https://github.com/OpenXiangShan/XiangShan/discussions
- 香山文档:https://docs.xiangshan.cc/
- 香山用户手册:https://docs.xiangshan.cc/projects/user-guide/
- 香山设计文档:https://docs.xiangshan.cc/projects/design/
编辑:李衍君、曾锦鸿、杨泽辰、张韩乐、游昆霖、甄好、燕翼鸣