1. 量子电路模拟全景
量子电路模拟的目标,是在经典计算机上尽可能高效地复现量子电路对量子态的作用。一个含 n 个量子比特的纯态,其状态向量包含 2n 个复数振幅;单比特门只改变振幅之间的线性组合,双比特门则把两个比特的振幅按 4×4 的酉矩阵耦合起来。模拟器要做的核心工作,就是反复执行“取振幅—乘矩阵—写回振幅”这一过程,并保证结果与量子力学预言一致。
理解模拟瓶颈,先要理解状态向量的存储与更新代价。以双精度复数为例,每个振幅占 16 字节,因此 n=30 时状态向量约需 16 GiB,n=40 时约需 16 TiB。单比特门作用于第 k 位时,只需把下标中第 k 位为 0 和 1 的振幅成对取出,做一次 2×2 矩阵乘法再写回,时间复杂度为 O(2n)。双比特门作用于第 i、j 位时,需要按这两位取四种下标组合,做 4×4 矩阵乘法,复杂度同样是 O(2n),但访存模式更复杂,容易成为缓存不友好的热点。
因此,状态向量模拟的瓶颈通常不在浮点运算峰值,而在内存容量与内存带宽。当 n 超过单机内存后,必须采用分布式状态向量:把 2n 个振幅按高位比特切分到多个进程,每个进程只保存一部分振幅。此时单比特门若作用在本地比特上,可完全本地完成;若作用在全局比特上,则需要跨进程通信,把成对振幅交换到同一进程后再计算。通信量、延迟和负载均衡,往往比算术本身更决定整体性能。
另一条路线是张量网络模拟。它不显式保存完整状态向量,而是把量子电路表示成一张张量网络:每个门是一个小张量,量子比特的连线表示张量缩并。对于低纠缠、浅层或具有特定结构的电路,张量网络可以只保留多项式规模的中间张量,从而模拟远超状态向量上限的比特数。代价是缩并顺序对计算量影响极大:不同的缩并顺序可能带来指数级差异,寻找近似最优缩并顺序本身就是一个组合优化问题。
下面这张图把两条主流路线放在同一张“模拟全景”中对比:左侧是状态向量路线,强调振幅数组、门更新与内存/带宽瓶颈;右侧是张量网络路线,强调张量、缩并顺序与键维数瓶颈。中间用“电路结构、纠缠、可用内存”作为选择依据,帮助判断何时该用哪条路线。
从工程实现角度看,状态向量模拟器通常把振幅数组按 2 的幂次分块,使单比特门和双比特门都能在连续内存块上完成。以作用在第 k 位的单比特门为例,可把下标写成 i = high·2^(k+1) + b·2^k + low,其中 low 取遍 0 到 2k−1。对每个 high 和 low,取出 b=0 与 b=1 的两个振幅,与 2×2 矩阵相乘后写回。这样循环的访存步长固定,便于向量化和缓存预取。双比特门则把两个目标位分别记为 i、j,按四种位组合取振幅,做 4×4 矩阵乘法;若两位距离较远,访存跨度大,常需要先做局部重排或分块转置。
张量网络模拟的实现重点在缩并顺序。一个常见做法是先把电路转成张量网络,再用贪心或启发式算法逐步选择“缩并代价最小”的一对张量进行合并,直到只剩一个张量。缩并代价通常用结果张量的元素个数或浮点运算量估计。对于含 20 个量子比特、深度 10 的随机电路,若纠缠较强,键维数会迅速增大,张量网络未必优于状态向量;但对于深度较浅、纠缠受限的电路,张量网络可以把内存从 2n 降到多项式级别。
16 × 2^n 字节。若该值远小于可用内存,优先状态向量;若远超内存且电路纠缠较低,再考虑张量网络。分布式状态向量适合“内存不够但通信可接受”的场景,张量网络适合“纠缠低但比特数大”的场景。无论哪条路线,加速都围绕三个方向展开:减少数据移动、提高并行度、降低中间状态规模。状态向量路线可通过分块、GPU 加速、跨节点通信重叠来提升吞吐;张量网络路线可通过更好的缩并顺序、键维数截断和近似缩并来控制代价。理解这两条路线的数据结构、更新方式和瓶颈来源,是后续学习具体模拟器实现与优化技巧的基础。