“而这一层,是整个框架中,唯一与具体的底层物理硬件产生绑定的部分。”
江临转过头,看着三人说。
“最关键的是,它是热插拔的。”
听到热插拔三个字,陈启明的呼吸频率,肉眼可见地变得重了一分。
“插拔,这怎么理解?”乔越的工程经验尚浅,大脑的运转速度没太跟上这跳跃的架构设计。
“意思是,如果我们的目标环境换了一台不同微架构的机器,我们只需要把这块后端的代价评估板子单独拆下来换掉。”
江临耐心地解释道。
“如果我们喂给评估引擎的是英特尔某代架构的延迟表和埠竞争模型,它就按英特尔的脾气打分。如果我们换成ARM架构的模型,它就按ARM的吞吐上限去评估。而前面两层的搜索和验证逻辑,哪怕是一个标点符号的代码,都不需要修改。”
实验室里的空气仿佛被瞬间抽干。
直到裴砺走过来。
“架构切开不难,难的是切开之后别漏血。”
他走到屏幕前,指着第二层验证器。
“你的零一验证器证明的是coare-exchange网络。可我的超优化器吐出来的东西,不一定老老实实长成比较器。它可能是cv,可能是blend,可能是pnsd,也可能靠某种未定义行为省一条指令。”
“你怎么证明这些脏东西,真的等价于你抽象层里的coare-exchange?”
“所以零一验证器只是第一道门。”
江临拿起马克笔在一旁的白板上写下五行字。
抽象网络。
原语语义。
源码实现。
二进位等价。
微架构代价。
“你卡了三年的,不是一块铁板,而是五层东西混在一起,我们得先把它拆开。”
乔越在一旁张大了嘴巴,目光在裴砺和江临之间来回游移。
直到这一刻,他才具象地意识到,眼前这个总是带着平静神情的少年,绝对不仅仅是数学非常厉害那么简单。
他还拥有着对复杂工程进行降维解构的恐怖直觉。
“陈老师,在开始实际搜索之前,我必须先向您确认一个工程上的约束条件。”江临却没有沉浸在旁人的惊叹中,而是迅速将话题拉回了最硬核的实操层面,“您团队须求的这个sort5,它的内核诉求是单发延迟敏感,还是批量吞吐敏感?”
陈启明闻言,微微一怔。
乔越几乎是下意识地接话道:“快不就是快吗,时间短了自然就快了,这还分……”
话刚说了一半,乔越自己就卡壳了,他隐约察觉到自己可能暴露出了底层的认知盲区。
“这两者在现代微架构上,截然不同。”
替乔越把话补全的,是裴砺,语气中带着复杂的感慨。
“如果你一次只排一组五个数字,要求这组数据从输入到输出的时间最短,那么你追求的是最低的延迟。但如果你面对的是海量数据,比如一天要排上亿组,你的目标是单位时间内能处理多少组数据。在现代 CPU 那些复杂的乱序执行和超标量流水在线,这两个目标往往是互斥的。”
裴砺深深地看了江临一眼。
这个问题,即使是在他们这个专门搞系统底层的课题组里,也鲜少有人在写代码前正经八百地提出来讨论过。
所有人在面对优化这个词时,都默认了单一维度的快。
然后下意识去死抠比较器的绝对数量,去计较少写了一条汇编指令。
然而,在拥有多个ALU 埠、复杂分支预测和重排序缓冲区的现代处理器上,最少的指令条数,并不意味着最高的吞吐量。
“我们要跑在批处理的场景里,看重的是极限吞吐。”陈启明没有任何尤豫,直接给出了定调。
“那就好办了。”
江临点了点头,将代价评估后端的配置文档打开,挂上了陈启明之前提供的机器A的硬件埠争用模型数据。
“我把搜索目标明确设置为最大化吞吐量,然后,在这个特定模型下跑一个受限空间内的定向搜索。”
江临并没有激活全量搜索。
全量搜索整个指令状态空间,在没有算力集群支撑的情况下,是一个需要在算力废土里用几十年的时间去慢慢熬的浩大工程。
他仅仅是在一个被严密数学剪枝后的极窄范围内,让这套三层架构运转了不到五分钟。
工作站的散热风扇发出一阵短暂而急促的轰鸣后,屏幕上吐出