跳到主要内容

1.67 K 不值得写,104.95 K 才值得

原石
原石

· 阅读约 5 分钟

先贴一个函数。

double score(const design *d, const baseline *b)
{
    if (d->i_on < b->i_on * 0.98)
        return -INF;            /* 靠让电流换来的降温,不算 */
    return -peak_rise(d);
}

论文里没有这个函数,是我按它描述的那套流程自己补的。但它就是我对 arXiv:2609.17123 的全部态度。

主分类挂在材料,交叉挂了 AI 和硬件架构,题目里有个 GPT-6 Astra。干的事挺具体:二维 CFET 搭的反相器怎么散热,用 agent 搜候选散热结构,每个候选的电气代价交给一份给定的电热模型去算。12 nm 节点上,Astra 挑了一个重分布的源极互连几何,另一个协调 agent 提了一条朝衬底去的散热路径。合起来峰值温升降 1.67 K,金属体积不变,功耗 20 微瓦。

1.67 K 是个噪声级别的成绩。这个量级我一般不写进周报,搁这儿连记一笔都嫌费事。

让我停下来的不是这个数。

是挂在后面的那句——有效接触长度缩放之后,电流变小的时候,温度可以更低,热阻反而更高。

整篇里只有这句带攻击性。别的都是工艺和几何的堆料,读起来像一份合格的工程记录。这句不一样,它动了分子。

温升是个商,不是一个数。分子是热流,分母是走热的那条路。想让商变小,两条路:把分子摁下去,或者把分母做大。两条路在报告里都读作"峰值温升降低"。

/* 两条输出一样、性质完全不同的路 */
double a = lower_current(d);      /* 分子小了,分母可能反而变大 */
double b = better_heat_path(d);   /* 分母真的小了 */

上面那条是少干活,不是设计。1.67 K 里有多少来自前者,论文没告诉我,我也没本事从两行结论里反推出来。

我不反对散热研究。我反对的是把分子和分母混在同一个数字里报。

接触长度那段我没完全想透。热流降得比热阻涨得更快,总温升就还能往下走——听着顺,没验证过,先记个问号。

有一点它做对了:金属体积被钉死成约束,功率钉在 20 微瓦。这两个量不进收益函数,只进约束。

struct cand {
    double t_peak;
    double i_on;        /* 别只报 t_peak */
    double metal_vol;   /* 固定,所以它不该出现在目标函数里 */
};

一个量被钉死,它就不该再参与打分。这个道理简单到不用解释。可热设计那边的论文有一大半栽在这——所有量全塞进目标函数,读完你不知道是哪个量在出力,也没法复现。

第 11 条那个敏感性分析更直接:0.6 K 的降温,配 2% 的 nFET on-current 损失。

2% 的驱动电流,换 0.6 K。

驱动电流是反相器的全部身家,温度只是身家的条件。这笔交易我不签,做器件的多半也不签。这不是"有得有失",是拿本金换利息。

说回 agent。

看到 AI scientist workflow 这行字,我第一反应是划走。这类标题底下的东西读得够多了,通篇流程图配几个大词,挑不出一行能 make 的。这篇让我往下翻的是分工。

Astra 干的是在一堆候选几何里挑一个。协调 agent 干的是提一条散热方向。两个动作夹在同一组约束里——金属体积固定,功率固定。候选的电气代价不由 agent 判断,由外部那份电热模型算。

for (i = 0; i < ncand; i++) {
    c[i].t     = thermal_model(&c[i]);   /* 人给的 */
    c[i].cost  = electro_model(&c[i]);   /* 人给的 */
    c[i].score = score(&c[i], &base);    /* 人给的取舍 */
}
pick_best(c);

Agent 负责填 c[]。它没写 thermal_model,也没写 score。它在一张已经画好的地图上找点。

这个用法我认。让模型在一个砍好的空间里采样,和让它设计这个空间,是两件事。架构的活是砍掉哪些可能性,模型的本能恰恰相反——它倾向于把所有可能性都留着,因为它学的是"什么都覆盖"的那堆代码。我反对的是后者,不是前者。

边界全压在"给定"这两个字上。电热模型是人给的,agent 只能在里头搜。这条一破,让 agent 自己判断某个结构省不省电,它就同时当了选手和裁判。让 AI 给自己的实现写断言,等于让它给自己的 bug 当裁判。一个道理。

这篇里我唯一想搬走的是第 13 条。

复现工作找到了对得上的实现,也留下一个 104.95 K 的失败案例,专门留着做诊断。

104.95 K 是 1.67 K 的六十多倍。

1.67 K 那个成功案例你复现不出来,损失的是一个结论。104.95 K 那个失败案例你复现不出来,损失的是对模型在某一整片区域是否成立的信心。前者可以丢,后者是底线。

我捣鼓的那些东西一个道理。跑通的那条路径我从来不写注释,跑挂的那条我一定写满。跑挂的里头藏着我理解错掉的全部信息;跑通的里头只有一句"你看,能用"。

上午我还打算把这篇归进"又一个 AI 发论文"里直接跳过。翻到第 13 条才停住。

我想要的报告格式是这样:

/* 只报一行 */
printf("peak rise -1.67 K\n");
/* 该报两行 */
printf("peak rise -1.67 K    i_on -0.0%%\n");

温升和电流,必须印在同一行。分开印,总会有人只抄走第一行。

规则就一条:有人报"温升降低 X K",先问他电流动没动。动了的不算。

说句题外话。温度和复杂度是同一类东西,都是商不是数。你没法单独把它按下去,只能改分子和分母的比例,然后在别处还账。降 0.6 K 的账记在 2% 的电流上;砍掉一层抽象的账,也总有人来收,只是收得晚一些。

一个 1.67 K 的漂亮数字,半年后没人记得。一个 104.95 K 的失败案例,能让你半年后知道自己错在哪。

原石
原石

把代码当文章写的系统工程师,以源码立论、单线程式拒绝复杂度。

查看主页 →