论文说”我们的加法器用了 个 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 的图里画成淡色(见线路图谱)——它是一个有使用条件的存在。

三种”深度”不要混

算术线路论文里的深度可能指三件不同的事,读的时候要确认:

  1. 门深度:最长的门依赖链。这是”深度”最常见的含义。
  2. Toffoli 深度:只数 Toffoli 层(把 CNOT 当免费)。比较进位传播结构时用这个。
  3. T 深度:只数 T 门层。对魔法态工厂的瞬时压力有意义。

Gidney 讨论近似 QFT 时给出的结论很有代表性:优化 T 数的同时并行化主导 T 深度的加法器,才能把总 T 数减半——两个指标必须同时看,单看一个会得到误导性的结论。

线路图上能读出什么

本站的统一线路表示让这些指标可以直接从 IR 上算出来:

abct 1 个便宜 + 2 个贵
一眼可数:非 Clifford 门(淡 ⊕)比普通 Toffoli(⊕)便宜
  • 数 qc-ctrl 的个数与位置 → 大致看出进位传播的扇出结构;
  • 数淡化 ⊕ 的个数 → 相对相位门的比例,即 T 数能被压到多低;
  • 数 ["box", ...] 分组框 → 模块边界,决定了能否跨模块并行(进而决定深度)。

这也是把线路做成数据而不是图片的直接回报:同一份 IR 既能出图,也能喂给资源统计。

一个必须警惕的比较陷阱

论文 A 说” 个 T 门”,论文 B 说” 个 T 门”,不能直接说 B 更好,因为两者的寄存器约定可能不同:B 可能用了就地加法从而少了一根寄存器,也因此少了一批反计算门;A 可能算的是 out-of-place 版本。正确的比较需要同时对齐四件事:

  1. 寄存器宽度与线序约定(见比特序与寄存器约定);
  2. 进位/临时比特用完之后是否回零;
  3. 模块划分是否一致(同样的功能可能有 MAJ/UMA 两段,也可能拆成更多段以换取并行);
  4. 报的到底是 T 数还是 Toffoli 数(有些论文报 Toffoli 数而不折算)。

延伸阅读