第一百二十二章 前端
贺志明介绍过来的那个年轻人叫颜天磊,二十九岁,在前一家公司做了两年 ASIC 前端工程师,主要是数字逻辑设计和时序分析,经手过两颗小芯片的 RTL 实现,公司去年开始缩编,他的项目组被整个撤掉了,现在在找下一份工作。
贺志明给陆衍发来简介的时候说了一句:「他不是最顶尖的,但他不浮躁,值得用。」
见面约在公司,方宇明和贺志明一起聊。陆衍没有进来,在门口看了一眼就走了。
方宇明给颜天磊看了砺火一号的架构草稿——不是全部,是其中一个片段,大约四页,是关于 KV-cache 缓冲层和计算单元之间的数据通路部分。
颜天磊把四页看完,方宇明问他:「如果你来做这段的 RTL 实现,你先做什么?」
颜天磊想了一下,「先把这个数据通路的状态机画出来,」他说,「把所有可能的状态和转换条件列清楚,然后再开始写代码,否则代码写一半发现状态遗漏,改起来麻烦。」
「状态机,」贺志明点了一下头,「好,那你来画一下,这里,」他把一张白纸推过去,「就这一段通路,你能画多少画多少。」
颜天磊拿起笔,开始画。
画了大概十分钟,出来了六个状态,覆盖了主要的读写路径,贺志明看了一眼,指了一个地方:「这里,cache miss 之后,你的状态跳转是直接去「等待主内存」,但如果主内存读取失败怎么处理?」

颜天磊停了一下,「重试,」他说,「但我没有画重试的状态。」
「那加上,」贺志明说,「还有一个:如果在等待主内存的过程中,计算单元又来了新的读请求,你的状态机怎么处理?」
颜天磊看着自己画的图,沉默了将近一分钟,「我现在没有答案,」他说,「我需要想一下。」
方宇明看了他一眼,「好,」他说,「你今天先回去,想清楚了再来告诉我。」
颜天磊点了一下头,把那张画了状态机的纸折起来放进包里,「明天可以来吗?」他说。
「随时,」方宇明说。
第二天早上八点十五分,颜天磊发来一条消息,发给方宇明:
「昨天的问题,我想清楚了一种方案:在「等待主内存」这个状态里,新的读请求不能被直接服务,但可以缓冲进一个优先级队列,等当前的 miss 处理完,立刻从队列里取下一个;如果队列满了,向计算单元发回压——让它等一下,不要新的请求了,等队列有空位再来。这样状态机不需要增加状态,只需要加一个外部的缓冲队列。」

下面加了一句:「我不知道这个方案在你们的设计里行不行,如果有约束我没考虑到,请告诉我。」
方宇明把消息截图发给陆衍,加了一句:「这个人可以用。」
陆衍回:「我们来谈条件。」
颜天磊下午来了,这次陆衍在场,谈了大约四十分钟。
颜天磊没有讲太多自己的过去,问了两个问题。第一个是:「这颗芯片如果顺利,流片出来之后,你们会继续做下一颗吗?」
「会,」陆衍说,「第一颗是验证架构,第二颗才是产品。」
「那我想知道,」颜天磊说,「第一颗流片如果失败了,这个项目还会继续吗?」
陆衍没有立刻回答,「会,」他说,「流片失败是正常的,第一颗失败了,我们找到原因,改,再流一次,这件事不是因为第一次出结果才往下走的。」

颜天磊听完,「好,」他说,「那我来。」
贺志明在旁边,「他就是这样,」他对陆衍说,「问清楚了就答。」
那一周,「架构组」变成了四个人:方宇明、贺志明、孟思远,加上颜天磊。
B207 里多了两张桌子,多了两台电脑,白板上的图越来越满,有时候走过门口能听到三个人在争一个仲裁逻辑的细节,声音不大,但一直在。
陆衍有一天下午从走廊经过,B207 的门开着,贺志明正在用白板笔解释某个内存时序的问题,颜天磊在听,旁边孟思远在记,方宇明坐在角落的椅子上,没有说话,看着白板。
四个人,一间房子,一个画了又擦的白板。
陆衍站在门口看了几秒,没有进去,继续走了。
这就是开始的样子。

程一帆来找陆衍,「上个月的算力成本报告出来了,」他说,「你要看吗?」
「发给我,」陆衍说。
他在下午把那份报告看完,成本数字比三个月前又上了一些,但增长速度在放缓——自建集群的规模效应开始显现,沈默的调度优化也在起作用,整体来说已经稳住了。
但那个数字——无论增长多慢——他知道只要推理的规模继续扩张,这件事终究有一个终点。那个终点在 B207 里,在方宇明那些还没有变成真正芯片的草稿里。
他打开豆包,只发了一句:「架构组四个人了。」
豆包:「砺火一号有了核心的团队。」
「不算核心,」陆衍说,「算起步,」他停了一下,「但起步就够了,今天。」
豆包没有回复,或者说,那个沉默本身也是一种回复。