【香山双周报 94】20260119 期
欢迎来到香山双周报专栏,我们将通过这一专栏定期介绍香山的开发进展。本次是第 94 期双周报。
香山开发方面,前端对 1-taken 1-fetch 架构进行收尾工作,同时进行 2-taken 2-fetch 架构探索;后端继续推进向量单元的设计与多个模块的重构;访存修复了数个 bug,同时继续预取与 MDP 的探索工作。
加速!加速!!
众所周知,处理器的仿真非常花费计算资源。香山完整性能回归使用的 checkpoint 一共有 1169 个。使用 verilator 进行仿真时,我们通常会编译成 8 个或 16 个线程的版本以提升仿真速度。即便如此,一些 checkpoint 也需要运行数十个小时。
随着 V3 规模的变大,仿真速度下降到了 V2 速度的约 1/3,这让本来就慢的性能回归雪上加霜。更关键的是,现在 V3 正在经历快速性能迭代,性能回归的需求比以往更大,没有数据就进行性能优化无异于闭眼开车。
为了解决仿真速度的问题,我们首先定位了使用 verilator 时仿真速度性能下降的原因。经过前后对比分析,我们发现 V3 仿真速度下降的锅竟然有很重要的一部分要由升级 Chisel 7 来背。简单来说,Chisel 7 换了一种 Mux1H 的生成方法,导致 verilator 生成了查找表,而不是数组访问。详细的分析可以查看这个 issue (https://github.com/verilator/verilator/issues/6760)。这一修复可以带来 100% 的速度提高,相关修复也已经进入了 verilator 主线。
可是,即使提高了 100% 的速度,V3 的仿真速度仍然只有 V2 的 60%。为了进一步提高仿真速度,我们引入了香山团队自己开发的仿真器 GSIM。准确地说,GSIM 其实并没有加快仿真速度,单线程的 GSIM 仿真速度惜败于 16 线程的 verilator,小胜 8 线程的 verilator。虽然速度没有提高,但并行度却提高了 10 倍,这意味着我们现在能够以同样的计算资源,狠狠进行 10 倍数量的性能回归。
为了进一步压榨现有服务器,香山团队的 L 和 X 同学最近还搓出了一个基于 GitHub 的香山特色作业调度系统 perf trigger。这一青春版的 lsf 系统可以利用上所有服务器,同时统一管理所有的仿真配置和结果。Perf trigger 已经成功管理了多个性能回归作业,虽然有时还会有一些不稳定的情况爱来每天凌晨 4 点自动重启的 GitHub Runner 、小水管专线和、服务器维护,不过 trigger 在整个香山团队内大受好评。
近期进展
前端
? RTL 新特性 ? 完善 SC 预测器的 bias 和 path 表(#5458) ? 在 TAGE 中使用 WriteBuffer 的计数器累加机制(#5470) ? 将 ABTB 的 set 和 bank 索引存入元数据,移除 BPU 顶层额外保存的 s4 级 pc(#5494) ? 支持开关 ICache parity 出错时自动重取的机制(#5501) ? Bug 修复 ? 修复 MBTB replacer 一处笔误(#5540) ? 修复 TAGE 使用元数据更新的条件(#5461) ? 修复 GHR 在 FTQ 阻塞情况下丢失更新的问题(#5469) ? 修复 RAS 在 FTQ 阻塞情况下错误更新元数据的问题(#5481) ? 修复 WriteBuffer 在 setIdx 命中时的替换选择逻辑(#5526) ? 修复 IFU 在 MMIO 空间推测取指的问题(#5459) ? 时序/面积优化 ? 禁用 ICache parity 出错时自动重取的机制以优化时序(#5501) ? 代码质量 ? 调试工具 ? 增加 MBTB trace(#5466)
后端
? RTL 新特性 ? 时序/面积优化 ? 访存单元重定向不再通过 flushpipe 和 replayInst 写回 (slow redirect),统一通过 memviolation 写回 (fast redirect)(#5491) ? 调整 TopDown 的时序(#5451)
(#5491)? 代码质量 ? 删除无用代码 isXret(#5483) ? 在立即数上改用样例类 Imm 进行配置,而非直接使用 UInt(#5523) ? 删除部分 IssueQueue 相关的无用代码(#5519) ? 删除 Regfile 中 assertion 外不必要的条件判断(#5505) ? 性能分析工具 ? 添加后端 V2 配置参数 BackendV2Config 以用于性能对比(#5476)
访存与缓存
? RTL 新特性 ? MDP、MMU、LoadUnit、StoreQueue、L2 等模块重构与测试持续推进中 ? Bug 修复 ? (V2)修复了 exception buffer 入队逻辑中 lqIdx 与 sqIdx 未连线的问题(#5512) ? (V2)修复了 SnpXFwd 中未考虑 SnpPreferUniqueFwd 的错误(CoupledL2 #460) ? (V2)修复了 MainPipe 中 l2Error_s3 的生成逻辑(CoupledL2 #463) ? 调试工具 ? 持续改进 CHI 基础设施 CHIron ? 开发用于新版 L2 Cache 的验证工具 CHI Test。持续推进中
性能评估
编译参数如下所示:
处理器及 SoC 参数如下所示:
注:我们使用 SimPoint 对程序进行采样,基于我们自定义的 checkpoint 格式制作检查点镜像,Simpoint 聚类的覆盖率为 100%。上述分数为基于程序片段的分数估计,非完整 SPEC CPU2006 评估,和真实芯片实际性能可能存在偏差。
相关链接
? 香山技术讨论 QQ 群:879550595 ? 香山技术讨论网站:https://github.com/OpenXiangShan/XiangShan/discussions ? 香山文档:https://xiangshan-doc.readthedocs.io/ ? 香山用户手册:https://docs.xiangshan.cc/projects/user-guide/ ? 香山设计文档:https://docs.xiangshan.cc/projects/design/
编辑:徐之皓、吉骏雄、陈卓、余俊杰、李衍君
