论文说”我们的加法器用了 个 T 门”,读者常常以为这意味着”比原来的 便宜一半”。但 T 门本身不是最终成本——每个 T 门都要向一个持续运行的魔法态工厂索取一个魔法态。于是 个 T 门在墙钟时间上完全可能比 个 T 门更贵,因为深度更长、工厂更忙。算术线路的成本评估是一组互相牵制的指标,读懂它们之间的张力,比记住某个数字更重要。
为什么是 T 门
Stabilizer 码(表面码、颜色码)的容错门集是 Clifford 门集,生成的群是二价的:,最多只能编码 1 个逻辑比特。要在码空间里做通用计算,必须引入 Clifford 之外的资源,最便宜的就是 T 门()及其逆 。
由此得到算术线路计账的默认公约:
后面这条是 Anitaq 等人给出的经典分解。整条算术线路的成本因此可以折算成单一标量:T 数。
五个互相牵制的指标
| 指标 | 符号 | 含义 | 主要受什么支配 |
|---|---|---|---|
| T 数 | 非 Clifford 门总数 | 线路结构;能否用相对相位门替代 | |
| 深度 | 最长依赖链上的门数 | 进位链长度;能否并行 | |
| 辅助比特 | 需要额外准备并回零的比特 | 进位存哪、要不要反计算 | |
| 线路规模 | 门总数(含 CNOT) | 寄存器宽度 | |
| 魔法态吞吐 | 工厂每秒能产多少个 | 工厂数目与码距 |
这五个量不能互相换算成单一数字,原因在于硬件把它们放在完全不同的位置:
- T 数决定需要多少个逻辑比特来跑魔法态工厂;
- 辅助比特数直接乘进物理比特开销(乘上纠错码的扩张因子);
- 深度乘上码距,得到每个 T 门的逻辑时间;
- 工厂吞吐必须能跟得上深度,否则再少的 T 门也会被工厂饿着。
Gidney 在讨论块先行加法器时专门建模了”等待魔法态”这件事(见混合加法器一节引用的文献):把比特分组能减少 Toffoli 数,但会增加深度、加大工厂压力,两者必须一起算才有意义。
相对相位门:省 T 数还是换深度
上一节的折算会漏掉一类门:相对相位门。它们作用在计算基上与普通门完全相同,只差一个全局相位,因此在某些位置可以顶替 Clifford 的辅助位,直接省掉若干 门。
最常用的是相对相位 Toffoli(rccx)。在 Gidney 的”临时逻辑与”构造中,一个这样的门用 4 个 门存入、却能用 0 个 门擦除,于是整个 位加法器的 T 数从 降到 ——精确减半。
代价是这类门不能放在线路的任意位置:它只能出现在”之后紧跟反计算”的位置上。T 数的下降是靠约束换来的,这也是为什么相对相位门在本 wiki 的图里画成淡色(见线路图谱)——它是一个有使用条件的存在。
三种”深度”不要混
算术线路论文里的深度可能指三件不同的事,读的时候要确认:
- 门深度:最长的门依赖链。这是”深度”最常见的含义。
- Toffoli 深度:只数 Toffoli 层(把 CNOT 当免费)。比较进位传播结构时用这个。
- T 深度:只数 T 门层。对魔法态工厂的瞬时压力有意义。
Gidney 讨论近似 QFT 时给出的结论很有代表性:优化 T 数的同时并行化主导 T 深度的加法器,才能把总 T 数减半——两个指标必须同时看,单看一个会得到误导性的结论。
线路图上能读出什么
本站的统一线路表示让这些指标可以直接从 IR 上算出来:
- 数
qc-ctrl的个数与位置 → 大致看出进位传播的扇出结构; - 数淡化 ⊕ 的个数 → 相对相位门的比例,即 T 数能被压到多低;
- 数
["box", ...]分组框 → 模块边界,决定了能否跨模块并行(进而决定深度)。
这也是把线路做成数据而不是图片的直接回报:同一份 IR 既能出图,也能喂给资源统计。
一个必须警惕的比较陷阱
论文 A 说” 个 T 门”,论文 B 说” 个 T 门”,不能直接说 B 更好,因为两者的寄存器约定可能不同:B 可能用了就地加法从而少了一根寄存器,也因此少了一批反计算门;A 可能算的是 out-of-place 版本。正确的比较需要同时对齐四件事:
- 寄存器宽度与线序约定(见比特序与寄存器约定);
- 进位/临时比特用完之后是否回零;
- 模块划分是否一致(同样的功能可能有 MAJ/UMA 两段,也可能拆成更多段以换取并行);
- 报的到底是 T 数还是 Toffoli 数(有些论文报 Toffoli 数而不折算)。
延伸阅读
- resource-accounting:把上述指标换算到物理资源
- t-count-vs-depth:两个指标之间的张力
- adder-resource-comparison:同卷不同加法器的横向对比
- circuit-representation:怎么从 IR 上把这些指标数出来