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.
| Experiment | quimb CPU (s) | src CPU (s) | src GPU (s) | Speedup (GPU) |
|---|---|---|---|---|
| 50 sites, | 37.76 | 0.23 | 0.57 | 66x |
| 20 sites, | 17.86 | 0.25 | 0.46 | 39x |
| 25 sites, , | 422.57 | 60.47 | 2.32 | 182x |
| 50 sites, , | 1040.72 | 137.37 | 4.47 | 233x |
At small the CPU is faster than the GPU, which has too little work to
fill it. At 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
to (80 Trotter steps), on one A100, fusing steps
per stack sweep. Errors are against a
reference.
| Qubits | Method | Time (s) | Infidelity | |
|---|---|---|---|---|
| 50 | 64 | quimb, 32 cores | 731 | 0.037 |
| 50 | 64 | src GPU, | 6.87 | 0.062 |
| 50 | 128 | src GPU, | 3.01 | 0.022 |
| 50 | 512 | src GPU, | 19.2 | 6.9e-4 |
| 100 | 256 | src GPU, | 11.6 | 0.014 |
| 100 | 512 | src GPU, | 40.6 | 1.8e-3 |
- Exact SVD truncation (
quimb) is more accurate at equal , and SRC at twice the bond dimension is more accurate thanquimb. The timings compare a GPU with 32 CPU cores, and thequimbtime 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 compressed to 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 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.
| Stack | Depth | one sweep (s) | pairwise (s) | ratio | |
|---|---|---|---|---|---|
| Trotter, 1 layer + MPS | 2 | 64 | 0.0764 | 0.0642 | 1.19 |
| Trotter, 2 layers + MPS | 3 | 64 | 0.0936 | 0.147 | 0.639 |
| Trotter, 3 layers + MPS | 4 | 64 | 0.201 | 0.207 | 0.975 |
| Trotter, 4 layers + MPS | 5 | 64 | 0.384 | 0.283 | 1.36 |
| random , 2 layers + MPS | 3 | 64 | 1.67 | 0.52 | 3.21 |
| random , 3 layers + MPS | 4 | 64 | 24.7 | 0.837 | 29.5 |
| random , 3 layers + MPS | 4 | 64 | 316 | 2.33 | 136 |