编译:把逻辑线路翻译成硬件能跑的
连通性和门集决定了线路最后长什么样
你画了一条三比特线路,第一个 CNOT 从 q0 连到 q2。芯片上 q0 只和 q1 耦合。线路没有错,机器跑不了——编译从这里开始。
映射与搬态
编译器先选一张映射表:逻辑 q0 放物理 3,逻辑 q1 放物理 5,诸如此类。选哪张表,会影响后面要搬多少次家。然后它逐个检查双门:两端在耦合图上相邻,就直接执行;不相邻,就得把态搬过去。
搬家靠 SWAP。一个 SWAP 可拆成三个 CNOT,所以每次交换都要付三个双门的代价,而双门错误率通常比单门高一个量级。深线路里,路由开销可能超过原线路本身。
演示里的线路实验室只允许相邻比特做 CNOT,而且末位会绕回第 0 位——所以 3 个比特恰好连成一个环,q0 与 q2 也能直接做门。真实芯片更像一条线或一张网格,q0 与 q2 往往不相邻,这时才需要插 SWAP 把态搬过去。演示呈现的是「门只能作用在耦合图相邻两端」这条规则,搬家的开销要自己算。
搬完家,还得把门翻译成硬件认识的样子。
门集与优化
多数超导机器的原生门集是「任意 Z 旋转 + 一个固定的 90° 单比特门 + CNOT 或 CZ」。你写的 H、T 都要被翻译:单比特门拆成若干旋转,多控门拆成单比特与双门的组合。反过来,任意门也能用 H、T 与 CNOT 的组合逼近,这是通用门集的一种具体写法。
翻译不唯一。同一条线路可以翻成不同深度、不同双门数的版本;优化级别越高,编译器越敢删门、合并旋转、重排对易的门,但编译更久,也更需要验证。
编译的目标通常是最小化双门数与深度,而不是门的总数。成功率按每步相乘,多一个双门就多一次错误;多一层深度,就多一次退相干。不同编译结果在同一台硬件上可能差出明显的成功率,所以「编译前后」本身就是一个需要基准测试的变量。
编译先决定逻辑比特落在哪里,再为每个不相邻的双门插入 SWAP,最后把门翻译成硬件原生门集。它不改变线路的逻辑,却改变线路的深度与双门数——而这两项直接决定成功率。