哈哈小说
第 7 卷 · 造芯 · 第 124 章 · 38 段 · 2030 字

仿真

第一百二十四章 仿真

颜天磊的状态机模块用了三周时间,经历了四个版本。

第一版是在 Icarus 上跑通的那个原型,四个状态,功能正确,注释比代码多。

第二版是贺志明看过之后要求修改的——SRAM 的访问延迟是有真实的时钟周期数的,一个读操作要两个周期,贺志明让颜天磊把这个约束写进状态机里,不能假设读是瞬间完成的。

第三版是颜天磊在深夜自己改的,他把 DISPATCH_HIT 这个状态拆成了两个:`DISPATCH_HIT_REQ` 和 `DISPATCH_HIT_WAIT`,第一个负责发出读请求,第二个等待读数据返回。这不是贺志明要求的,是他自己想清楚以后加的。

第四版是完整功能版,DISPATCH_MISS 的分支写完了,包括主内存回填路径,以及贺志明说过的优先级队列的衔接接口。


第四版提交给孟思远的时候,是九月的一个下午,B207 里很安静,方宇明不在,贺志明在自己那边做 SRAM 单元的前期设计,孟思远坐在角落,颜天磊把文件夹路径发给他,「你来跑一次,单模块的测试用例在 `sim/tc_arb_v4/` 里,全跑一遍。」

孟思远在 Icarus 下把测试用例一个一个过了,四十分钟,二十三个用例,二十三个 PASS。

「全过了,」孟思远说。

插图

颜天磊在旁边看着最后那个 PASS 弹出来,没有说话,把椅子推到旁边,「你现在给我跑一个我没写测试用例的场景,」他说,「随机流量压力测试,用最高并发,持续五秒,看看波形。」


孟思远自己写了一个简单的压力测试脚本,模拟二十个计算单元同时发读请求,每个单元随机产生 cache hit 或 cache miss,高并发下的随机负载,跑五秒。

仿真跑起来,波形图出来了,孟思远盯着看了一分钟,「这里,」他说,「有问题。」

他把波形图放大,指了一处,「你看这个时间轴,在高并发的时候,`QUERY_CACHE_STATE` 这个状态的停留时长变长了——理论上查 cache 状态只要一个周期,但这里变成了三到四个周期,」他说,「看起来像是多个请求同时进来,cache 状态查询模块在排队。」

颜天磊把那段波形看了一会儿,「它在排队,」他说,「因为我没有给 cache 状态查询做并发处理,同一时间只能查一条,多个请求进来就得等。」

「那就是说,」孟思远说,「仲裁模块的入口变成了新的瓶颈。」

「对,」颜天磊说,「不是 cache miss 瓶颈,是 cache 状态查询本身。」

他把那段波形截图,发给贺志明,加了一行文字:「找到一个问题,在高并发下 cache 状态查询串行化了,需要你帮看一下 SRAM 这边能不能支持多端口查询。」

插图

贺志明的回复来得很快,不到十分钟:「来,你们现在方便吗。」

颜天磊和孟思远在 B207 等了大约五分钟,贺志明从自己那间屋子走过来,把椅子拖到孟思远的电脑前,「把那段波形放给我看,」他说。

他看了两分钟,「我知道问题在哪,」他说,「你现在用的是单端口 SRAM,同一时间只能有一个读操作在跑,所以你的状态查询是串行的,这是 SRAM 本身的限制,不是你代码的问题。」

「那改成多端口?」颜天磊说。

「双端口 SRAM,」贺志明说,「同时支持两个读,面积代价大约是单端口的一点四到一点六倍,但你现在这个仲裁逻辑,二十个并发,最差情况每次来两个请求方向不同,两端口就够了。」

「你能改吗?」颜天磊说。

「我做这个的,」贺志明说,「给我一周,我把双端口版本的 SRAM 模型做出来,你再用这个模型跑仿真,看数字对不对。」

插图

「好,」颜天磊说,「那我这边先把状态机的其他部分继续推进,等你那个模型。」


贺志明在回去的时候,在门口停了一下,「孟思远,」他说,「那个压力测试脚本,你能不能加一个统计——每个状态的平均停留时钟数,全程输出一张表,不只是波形图。」

孟思远点了一下头,「大概要半天。」

「不急,」贺志明说,「等颜天磊的下一版出来,你再一起跑,这样我看数字比较全。」

他回去了,B207 重新安静下来。

颜天磊把刚才那段对话重新想了一遍,打开自己的那个 RTL 文件,在注释里加了一行字:

`// TODO: SRAM single-port → dual-port pending (贺志明 2020-09-XX)`

他写完日期的位置,停了一下,把那个 `XX` 换成今天的日期,四位数字,很清楚。

插图

陆衍当天下午收到颜天磊发来的一条简短消息:「高并发场景发现 cache 状态查询串行化问题,贺志明确认是单端口 SRAM 限制,正在改,预计一周。进展正常。」

陆衍回了一个字:「好。」

然后打开豆包,把这条消息原文转发过去,加了一句:「他们自己找到了,自己解决了,我没有介入。」

豆包:「这件事比问题本身更重要——他们知道怎么把问题从现象定位到原因,然后找到能解决这个原因的人。一个团队能做这件事,后面遇到的大多数问题都能用这个方法解决。」

陆衍把这话看了一遍,没有回复,关上了豆包。

窗外是上海的下午,算力账单还在每个月继续涨,B207 里那几个人不知道这件事,也不需要知道。他们只知道今天找到了一个问题,然后想清楚了怎么解决。

这就够了。