BREAK LAYER 研究阅读室

Agent怎样发现问题,又为什么这样改

这里关心的是解怎样被找到:agent先观察什么,怎样判断原因,选择哪个改动,又怎样用实验修正判断。我们用六套完成同一道题的程序作为材料:五套榜单方案,以及你原来的 50,416分 Astra方案。每套方案都可以选择硬件配置,并决定如何把Transformer计算拆开、搬运和排队。它们的输出必须通过正确性检查,面积和功率也不能超限;在此基础上,用更少周期完成两道题,分数才更高。

直接进入两条完整研究过程: 你的完整更新过程 · 方案三的观察、试验与转向。下面的入门说明供遇到术语时查阅。

一个具体转折:你的方案试过放慢Q/K/V广播,功率峰值却几乎不变。这次试验削弱了“广播节奏就是峰值主因”的猜测。随后改为让K/V直接写到最终位置,去掉中间搬运,才得到合格结果。值得学的是用结果缩小怀疑范围,而非记住某个延迟参数。

先分清两道题:一次处理很多位置,和逐个生成新位置

P1(prefill,处理已有的一段输入):一次有两段输入,每段64个位置。同一层权重会被许多位置使用,因此适合让一次搬来的权重连续服务多行计算。程序还要算出接下来的第一个新位置。

D1(decode,逐个生成):已有128个位置的历史信息,然后连续算8个新位置。后一步的输入要等前一步提交后才释放,不能把这8步当成同时已知的输入一起计算。不过,8步使用的是同一套权重;若第一步把权重装进计算单元附近的小存储,后7步就可以继续使用。

因此,两道题省搬运的方法不同:P1主要争取“一块权重多算几行”,D1主要争取“一次装入跨多步使用”。两题共用同一硬件,所以一个选择可能帮助P1,却拖慢D1。

机器长什么样:用一个矩阵乘法解释名词

以 输入 × 权重 = 输出 为例。完整矩阵太大,程序会取其中一小块计算,再接着取下一块。这个小块叫 tile(分块)。例如 16×32×64 表示:一次更新16行、32列输出,本次沿求和方向处理64项;若完整求和维度更长,还要继续累加后面的块。

名词 在本题里具体是什么 为什么会影响速度
SM,计算单元 芯片上能并行干活的一组硬件。一个SM包含矩阵、向量、特殊函数等资源 多SM需要程序确实拆出多份可并行工作
WG,工作组 程序分配给某个SM的一份任务及其私有数据。每SM最多同时驻留4个WG 决定谁持有哪块权重,谁等谁,以及能留多少数据
RF,寄存器存储 每个WG有64 KiB小存储,计算指令直接读取这里 很快但小;权重、输入、输出累加值和临时值要一起放得下
TC,矩阵计算单元 专门执行小矩阵乘法。MMA.ACC是“乘完加到已有输出上”的指令 算得快仍要等RF供数;不能只看TC数量
HBM,外部大内存 保存全部权重、输入、输出和较大的临时结果 容量大,但访问要搬运、排队;反复往返可能拖慢程序
DMA / NoC DMA负责搬运请求,NoC是片内传输网络 多个WG同时搬数据会争资源;更多并发也可能抬高功率
SFU / REDUCE SFU计算指数、开方等函数;REDUCE将许多数合成和或最大值 注意力、归一化需要它们;没有专用归约硬件也可走其他计算路径
scratch,临时区 程序在HBM里自行安排的中间结果地址 写入后再读出有代价;修改生产和消费方式,有时能省掉这次往返

一条典型路径是:HBM取权重 → DMA搬进WG的RF → TC计算 → 输出留在RF继续用,或写回HBM。看到“RF驻留”,意思就是让后面还要用的数据继续留在RF里。看到“组播”,意思是多个工作组请求相同数据时,硬件在满足合并条件时共用一次外存读取;仅打开开关不能保证所有请求都合并。

软件优化到底改了什么:看两种做FFN的方法

FFN是Transformer中的两次线性变换,中间隔一个GELU激活函数:W1把向量变宽 → GELU逐元素变换 → W2把向量变回原宽度。本题D1的中间宽度为512,最终宽度为128。

普通做法是:各任务算出一部分512维中间结果,写到HBM临时区;W2的任务再把它们读回来。优点是分工清楚,代价是中间结果要写一次、读一次。

另一种做法是:每个任务负责32个中间通道,同时持有W1对应的32列和W2对应的32行。它算完这32个数、做GELU后,直接在RF里乘W2,得到一份128维的部分和。16份部分和最后相加,形成完整输出。这样省掉了完整hidden中间向量的往返,但增加了部分和的写出与汇总。

这就叫“融合FFN”。它是否更快,取决于省下的搬运能否抵消新增加的归并和排队。方案一、二的最终D1采用了这种结构;方案三的一次融合试验反而变慢。后面会分别解释,不能仅凭“融合”两个字判断优劣。

从两条有记录的更新路径开始读

  1. 你的五万分更新路径:从“权重究竟放不放得下”开始,逐步解释为什么拆注意力、为什么融合、为什么最后宁愿多花117周期。
  2. Agent方法复盘:读方案三怎样从错误预测、物理分区和失败实验中找到下一步,并与自己的路径对照。
  3. 五套程序的构造与理由:查阅各成品怎样分工、数据怎样走、这样做解决什么问题、付出什么代价。

我们要提炼的经验:每次试验之前,把“我看见的现象”“我怀疑的原因”“我准备改变的东西”“什么结果会让我改主意”分开写。 例如,融合后变慢,只说明这次布局和调度没有获益;接着要查部分和搬运、通道排队和等待依赖,才能决定修布局还是放弃融合。

只有方案三和你的Astra方案有本次可用的过程材料。另四套可以解释程序的作用与代价,但不能从最终代码倒推出作者实际经历过的搜索过程。页面中的“构造解释”与“记录中的判断”会据此区分。

周期是这套教学模拟器中的耗时。功率上限看最热的1000周期窗口;“平均不忙”也可能有短时超限。下文会明确区分最终报告、局部实验和事后解释。

本次快照2026-09-28T10:04:34.745560+00:00 · v0.7 · 前五全部Verified

“最终”指榜单对应ZIP内送评的成品,不是课程截止版本。冻结快照不会随服务器排名变化;未重新运行评分。

展开五套成品的结果数据(用于核对)

实验结果备查

这些数值用来核对结果,不用来代替解释

阅读完整分析 →
官方报告 · 周期越少越好 · 功率为1000周期滑动峰值
提交分数P1周期D1周期面积 mm²P1 / D1 W
#1 方案186,665.62210,39925,53923.28219.218 / 19.289
#2 方案273,915.77282,43126,15523.99919.440 / 19.591
#3 方案372,237.05254,68630,36823.99919.694 / 18.888
#4 方案457,655.77361,86833,55123.90319.593 / 18.224
#5 方案552,508.66352,30541,54923.64516.958 / 19.357

P1:三层M1、2×64 prompt + 首个新位置。D1:两层M2、128-token历史 + 8步。共同分数取决于P1与D1的周期乘积;面积和功率是资格门槛。

02 / 选择两份成品

把硬件差异与软件分工放在一起看

03 / 五份成品的阅读入口

核心问题 / 解是怎样被找到的

可蒸馏的是判断方法,
以及判断如何被实验修正。

前五名中,只有第三名这次提交附带项目源码、搜索记录与五份对话快照。其他四名的搜索路径暂不可知。Astra旧复盘已完整迁入,可作为另一条有过程证据的对照。

方法复盘覆盖:模型失配、RF分区、功率归因、失败的融合、Query提前释放、首token常量合批,以及可复用的假设卡。