包云岗
25-09-17 00:02 微博认证:中国科学院计算技术研究所研究员

分享香山开源处理器团队发表在体系结构顶会MICRO 2025上一项创新工作:DiffTest-H
http://t.cn/AXhxJ14b

(一)缘起

DiffTest,源自软件工程领域,全称是Differential Testing(差分测试)。其核心思想是,对于根据统一规范的两种正确实现,给定相同的有定义的输入,它们的行为应当保持一致;如果不一致则表明至少有一种实现不正确。

简单来说,就是一道题交给两个人算,如果答案一样,则都通过;如果不一样,则表明肯定有人错了,再仔细检查到底哪里出错。

DiffTest最早是由余子濠博士在2017年为了方便教学实验而设计的芯片功能验证工具,后来应用到第一期“一生一芯”计划中,为保障流片成功发挥了不可替代的作用。

随后,DiffTest又被应用到香山的开发中,是香山系统级功能验证的利器,也是香山团队发表的MICRO 2022论文的重要组成部分(入选2022年度IEEE MICRO Top Picks)。

(二)难题

在实际应用中,DiffTest需同时运行两个RISC-V实现:一个为高速(几百MHz)的C语言版本,另一个是精准但缓慢(仅几KHz)的RTL仿真版本。二者速度相差数万倍,导致验证效率极低。

如何加速RTL仿真成为关键所在。总的来说,有两种思路:一种是“堆机器”,用大规模机器来运行RTL仿真软件,比如使用几十台、上百台甚至上千台服务器(成千上万个CPU核),虽然每个CPU核运行RTL仿真软件的速度只有几Khz,但通过大规模并行也可以实现加速效果,只是单个仿真任务时间并没有缩短;另一种方式则是使用硬件仿真加速器或者FPGA来加速RTL仿真,往往可以达到几Mhz甚至几十MHz的速度,数量级缩短单个任务的时间。

然而,硬件仿真加速器虽然速度快,但DiffTest这套框架缺却用不起来了,导致只能提示“出错了”,但却无法精准定位“哪错了”。

(三)破局

2022年,石侃博士从英国英特尔回国加入计算所,旨在攻克上述难题。凭借长期在FPGA领域耕耘形成的技术积累,石侃老师带领团队很快从零到一构建了一套基于FPGA的ENCORE验证平台,首次将DiffTest框架初步在FPGA上实现,从而大幅提高了验证效率。

但FPGA资源有限,还无法容纳支持香山这种高性能CPU设计验证的DiffTest框架,即同时放下香山的C语言版本和RTL版本两种实现。

于是香山团队又提出了一种跨平台仿真的创新思路DiffTest-H:把C语言版本运行在一台x86机器上,作为上位机,实现几百MHz的仿真性能;而RTL版本则运行在帕拉丁或者FPGA上,仿真性能理论上可达到几MHz甚至几十MHz。如果能将DiffTest的整体性从原来的几KHz提升到几MHz,那就是3个数量级的性能提升,这将大幅提升香山的验证效率。

(四)挑战

用x86机器运行香山C语言版本(即NEMU),用帕拉丁或FPGA运行RTL代码,听起来思路很简单,但真正实现DiffTest-H时,却发现远没有那么简单——由于DiffTest-H框架要求每条指令运行结束后,都需要一次数据同步,对比C语言版本和RTL版本的执行结果是否一致,这导致在x86机器和帕拉丁/FPGA之间产生了大量通信开销,整个DiffTest性能实际只提升了2.5倍到20倍,离3个数量级的预期差了很多。

怎么破解这个技术挑战?香山团队通过对x86与FPGA之间的通信进行建模,识别出通信中包含三类语义信息,即结构语义、顺序语义、行为语义。在此认识基础上,提出来一套语义感知的通信方案,大幅提升了通信效率,在初始性能基础上提升了约80倍,恢复到相比于纯软件仿真3个数量级的提升。

(五)效果

在过去六个月内,DiffTest-H 共帮助“香山”处理器发现定位超过 150 个复杂 Bug,涵盖异常中断处理错误、缓存一致性错误、向量控制逻辑错误等多种错误类别,产生超过 19 个 PR,共计 780 行以上的代码修改。

如今,DiffTest-H 已开源(http://t.cn/AXhxJ14G)并应用于开源高性能处理器“香山”的实际开发过程,并在MICRO论文复现(Artifact Evaluation)阶段得到全部三个徽章(可获取、功能正确、可重现)。

未来 DiffTest-H 将持续推进处理器敏捷验证的探索,提升处理器核验证效率。

发布于 北京