portc

Benchmarks

Accuracy and timing of SRC against quimb and against pairwise application.

The benchmark scripts live in benches/ and need the bench dependency group. Each folder's README holds the full tables and the commands to reproduce them.

Primitives

benches/primitives compares the MPO-MPO product against quimb's contract-then-compress on one Booster node of the Leonardo supercomputer at CINECA (32 cores, one A100-64GB). One MPO is random, the other a slightly perturbed identity, so the product is highly compressible.

Experimentquimb CPU (s)src CPU (s)src GPU (s)Speedup (GPU)
50 sites, χ=50\chi = 5037.760.230.5766x
20 sites, χ=100\chi = 10017.860.250.4639x
25 sites, χ=1000\chi = 1000, χid=4\chi_{\text{id}} = 4422.5760.472.32182x
50 sites, χ=1000\chi = 1000, χid=4\chi_{\text{id}} = 41040.72137.374.47233x

At small χ\chi the CPU is faster than the GPU, which has too little work to fill it. At χ=1000\chi = 1000 SRC uses about a seventh of the peak host memory of quimb, and single precision (complex64) brings the GPU time to 1.90 s and 3.03 s.

Quench dynamics

benches/stack evolves 50 and 100 qubits of the non-integrable mixed-field Ising chain from ∣0…0⟩|0\dots0\rangle to t=8t = 8 (80 Trotter steps), on one A100, fusing kk steps per stack sweep. Errors are against a χ=1024\chi = 1024 reference.

Qubitsχ\chiMethodTime (s)Infidelity
5064quimb, 32 cores7310.037
5064src GPU, k=1k = 16.870.062
50128src GPU, k=4k = 43.010.022
50512src GPU, k=2k = 219.26.9e-4
100256src GPU, k=4k = 411.60.014
100512src GPU, k=2k = 240.61.8e-3
  • Exact SVD truncation (quimb) is more accurate at equal χ\chi, and SRC at twice the bond dimension is more accurate than quimb. The timings compare a GPU with 32 CPU cores, and the quimb time looks inflated by how it is called, so they are not a speed-up; a comparison on the same hardware is still to do.
  • Fusing two or four steps per sweep is 1.8-2.8x faster than one at a time, for at most 7 % more infidelity.

Out-of-core

benches/large compresses a stack whose middle MPO is read from disk. On one A100, a 50-site stack with DM=1000D_M = 1000 compressed to χ=500\chi = 500 gives bit-identical results under a 4 GB and a 60 GB GPU budget, which keep 49 and 0 of the 50 environments on the host; spilling costs 18 % of the wall time.

Stack depth

benches/stack also compares one sweep over a stack, src(A_1, ..., A_k, psi), with pairwise application truncating after every product, as a function of the number of trains, on small chains on a laptop.

  • One sweep over the whole stack is at best moderately more accurate. For random stacks ending in an MPS it has about 20 % lower median error at depth 4; for random MPO products the gain is at most 8 %; for Trotter layers there is no systematic difference.
  • Both methods sit 2-15x above the best possible error at the same bond dimension, so the randomized sketch, not compounding across layers, dominates the error.
  • The per-site cost grows with χ2\chi^2 times the product of the layer bonds. Thin Trotter layers run at 0.6-1.4x the pairwise time up to depth 5, while random MPOs of bond 8 and 16 at depth 4 are 30x and 136x slower.
StackDepthχ\chione sweep (s)pairwise (s)ratio
Trotter, 1 layer + MPS2640.07640.06421.19
Trotter, 2 layers + MPS3640.09360.1470.639
Trotter, 3 layers + MPS4640.2010.2070.975
Trotter, 4 layers + MPS5640.3840.2831.36
random D=8D=8, 2 layers + MPS3641.670.523.21
random D=8D=8, 3 layers + MPS46424.70.83729.5
random D=16D=16, 3 layers + MPS4643162.33136

On this page