ITADN
QuantumSavory/QuantumClifford.jl
QuantumSavory/QuantumClifford.jl · 文件 下载 ZIP
文件最后提交记录最后更新时间
README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈

QuantumClifford.jl

进行静态分析
文档 Documentation of latest stable version Documentation of dev version
持续集成 GitHub Workflow Status Buildkite Workflow Status
代码覆盖率 Test coverage from codecov
使用 JET static analysis Aqua QA

一个用于处理量子稳定子态及其上的 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 AmherstProf. 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" 的支持。

Bounties

We run many bug bounties and encourage submissions from novices (we are happy to help onboard you in the field).