QuantumClifford.jl
进行静态分析| 文档 |
|
| 持续集成 |
|
| 代码覆盖率 |
|
| 使用 |
|
一个用于处理量子稳定子态及其上的 Clifford 电路的 Julia 包。 也支持图态。该包在大多数常见操作上已经非常快,但在性能方面仍有许多容易改进之处。有关各种算法的背景,请参阅详细的建议阅读与参考文献页面。
要安装它,请使用:
] add QuantumClifford
高效处理 纯 和 混合 stabilizer 态的数千个量子比特, 以及 作用于其上的稀疏或密集 Clifford 操作。
实现了 Pauli frames 以进行快速采样。
julia> P"X" * P"Z"
-iY
julia> P"X" ⊗ P"Z"
+ XZ
julia> S"-XX
+ZZ"
- XX
+ ZZ
julia> tCNOT * S"-XX
+ZZ"
- X_
+ _Z
该代码已实现向量化和多线程化。
快速、原地、无内存分配的实现。
快速基准测试(点击展开)
与其他 Clifford 模拟器的比较
我所知道的唯一其他具有类似性能的模拟器是 Stim。
Stim 和 QuantumClifford 的“底层”功能性能相似,但在更高层级上做出了不同的权衡:要原地相乘 1M 量子比特的 Pauli 算符,Stim 和 QuantumClifford.jl 都需要大约 15μs。这种差异无关紧要,且取决于编译器和硬件。
值得注意的是,Stim 通过高质量且相当复杂的 C++ SIMD 代码实现了这一性能,而 QuantumClifford.jl 则使用纯粹且简单的 Julia 实现。
在 13 ms 内相乘两个 1 gigaqubit Pauli
julia> a = random_pauli(1_000_000_000);
julia> b = random_pauli(1_000_000_000);
julia> @benchmark QuantumClifford.mul_left!(a,b)
BenchmarkTools.Trial: 373 samples with 1 evaluation.
Range (min … max): 13.209 ms … 14.304 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 13.355 ms ┊ GC (median): 0.00%
Time (mean ± σ): 13.427 ms ± 173.503 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 0 bytes, allocs estimate: 0.
在 9 ms 内对一个随机 1000 量子比特稳定子进行规范化
julia> @benchmark canonicalize!(s) setup=(s=random_stabilizer(1000))
BenchmarkTools.Trial: 6 samples with 1 evaluation.
Range (min … max): 8.516 ms … 8.614 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 8.536 ms ┊ GC (median): 0.00%
Time (mean ± σ): 8.550 ms ± 35.883 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 0 bytes, allocs estimate: 0.
稠密表乘法(500 个 CNOT 门作用于 1000 个量子比特的张量积)耗时 17 ms
julia> @benchmark apply!(s, gate) setup=(s=random_stabilizer(1000); gate=tensor_pow(tCNOT,500))
BenchmarkTools.Trial: 6 samples with 1 evaluation.
Range (min … max): 16.879 ms … 17.064 ms ┊ GC (min … max): 0.00% … 0.00%
Time (median): 17.010 ms ┊ GC (median): 0.00%
Time (mean ± σ): 16.997 ms ± 63.050 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 800 bytes, allocs estimate: 4.
在 3 μs 内对 1000 量子比特 tableau 中仅指定的量子比特应用稀疏门
julia> @benchmark apply!(s, sCNOT(32,504)) setup=(s=random_stabilizer(1000))
BenchmarkTools.Trial: 6 samples with 8 evaluations.
Range (min … max): 2.867 μs … 3.228 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 3.043 μs ┊ GC (median): 0.00%
Time (mean ± σ): 3.049 μs ± 119.106 ns ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 0 bytes, allocs estimate: 0.
在 18 μs 内测量一个稠密的 1000 量子比特 Pauli 算符
julia> s=random_destabilizer(1000); p=random_pauli(1000);
julia> @benchmark project!(_s,_p) setup=(_s=copy(s);_p=copy(p)) evals=1
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max): 17.753 μs … 39.444 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 21.971 μs ┊ GC (median): 0.00%
Time (mean ± σ): 21.893 μs ± 2.234 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 480 bytes, allocs estimate: 4.
在 1000 量子比特表格中测量单个量子比特耗时 15 μs
julia> s=MixedDestabilizer(random_destabilizer(1000));
julia> @benchmark projectY!(_s,42) setup=(_s=copy(s)) evals=1
BenchmarkTools.Trial: 10000 samples with 1 evaluation.
Range (min … max): 15.379 μs … 37.630 μs ┊ GC (min … max): 0.00% … 0.00%
Time (median): 16.912 μs ┊ GC (median): 0.00%
Time (mean ± σ): 17.120 μs ± 1.335 μs ┊ GC (mean ± σ): 0.00% ± 0.00%
Memory estimate: 464 bytes, allocs estimate: 5.
在 Ryzen Zen4 16 核 CPU 上以单线程执行的基准测试:
julia> versioninfo()
Julia Version 1.9.1
Commit 147bdf428cd (2023-06-07 08:27 UTC)
Platform Info:
OS: Linux (x86_64-linux-gnu)
CPU: 32 × AMD Ryzen 9 7950X 16-Core Processor
WORD_SIZE: 64
LIBM: libopenlibm
LLVM: libLLVM-14.0.6 (ORCJIT, znver3)
Threads: 1 on 32 virtual cores
更详细的基准测试可以在 github.com/QuantumSavory/QuantumCliffordBenchmarksLog 查看。
Office Hours
Office hours 每周五东部时间 12:30 – 1:30 通过 Zoom 举行。加入前,请务必查看 Julia community events calendar 以确认当周的 office hours 是否举行、改期或取消。欢迎提出任何问题或建议!
Support
QuantumClifford.jl 由 many volunteers 开发,由 University of Massachusetts Amherst 的 Prof. Krastanov's lab 管理。
开发工作得到 NSF Engineering and Research Center for Quantum Networks 的支持, 以及 NSF Grant 2346089 "Research Infrastructure: CIRC: New: Full-stack Codesign Tools for Quantum Hardware" 的支持。