Benchmarks

Symmetry-resolved basis construction and representative-state lookup speed, compared against XDiag.jl and QuSpin. SymBasis is benchmarked against its own dev checkout; XDiag.jl and QuSpin are whatever their latest released versions were at the time this page was generated. Regenerated automatically on every SymBasis release.

Threads are left at each library's own defaults (JULIA_NUM_THREADS=auto, OMP_NUM_THREADS unset) rather than pinned to 1 – these numbers reflect out-of-the-box performance, not a strictly single-threaded comparison.

Sweep: BENCH_SWEEP=quick

Spin-1/2 — basis construction

plot_construction("spin", "Spin-1/2")
Example block output
NconfigdimSymBasisXDiagQuSpinXDiag/SymBasisQuSpin/SymBasis
8U1703.173e-05 ± 3.3e-05 s4.152e-06 ± 6.8e-06 s3.941e-05 ± 1.7e-05 s0.13x1.24x
8U1+T(k=0)100.0001782 ± 0.00019 s5.22e-05 ± 3e-05 s5.045e-05 ± 1.2e-05 s0.29x0.28x
8U1+T(k=0)+P(p=1)80.0001123 ± 7e-05 s0.0001265 ± 3.1e-05 s5.276e-05 ± 1.2e-05 s1.13x0.47x
10U12523.948e-05 ± 3.6e-05 s4.265e-06 ± 6.5e-06 s3.464e-05 ± 7.1e-06 s0.11x0.88x
10U1+T(k=0)266.188e-05 ± 3.1e-05 s9.97e-05 ± 2.5e-05 s5.248e-05 ± 9.3e-06 s1.61x0.85x
10U1+T(k=0)+P(p=1)160.000216 ± 0.00027 s0.0002221 ± 2.4e-05 s6.385e-05 ± 9.3e-06 s1.03x0.30x
12U19240.0004061 ± 0.00027 s4.548e-06 ± 6.5e-06 s4.746e-05 ± 1.2e-05 s0.01x0.12x
12U1+T(k=0)808.604e-05 ± 3.2e-05 s0.0002646 ± 3.1e-05 s9.072e-05 ± 1.2e-05 s3.08x1.05x
12U1+T(k=0)+P(p=1)500.0001552 ± 2.6e-05 s0.0004887 ± 2.2e-05 s0.0001213 ± 1.4e-05 s3.15x0.78x
14U134320.0002003 ± 0.00017 s5.092e-06 ± 6.2e-06 s6.802e-05 ± 8.6e-06 s0.03x0.34x
14U1+T(k=0)2460.0001784 ± 3.2e-05 s0.0009059 ± 4.2e-05 s0.0002242 ± 1.3e-05 s5.08x1.26x
14U1+T(k=0)+P(p=1)1330.0003197 ± 6.7e-05 s0.00128 ± 5.6e-05 s0.0003295 ± 1.3e-05 s4.00x1.03x
16U1128700.0005674 ± 0.00032 s6.782e-06 ± 7.7e-06 s0.0001479 ± 9.1e-06 s0.01x0.26x
16U1+T(k=0)8100.0005136 ± 5.9e-05 s0.003611 ± 2.7e-05 s0.0007325 ± 1.6e-05 s7.03x1.43x
16U1+T(k=0)+P(p=1)4400.0009558 ± 0.00054 s0.00444 ± 6.3e-05 s0.001148 ± 2.5e-05 s4.65x1.20x

Spin-1/2 — representative lookup (seconds/call, amortized over batch)

NconfignsamplesSymBasisXDiagQuSpin
16U1+T(k=0)+P(p=1)100003.103e-07 ± 2.8e-08 sN/A (no decoupled API)1.795e-07 ± 3.2e-09 s

Spinless fermion — basis construction

plot_construction("fermion", "Spinless fermion")
Example block output
NconfigdimSymBasisXDiagQuSpinXDiag/SymBasisQuSpin/SymBasis
8U1702.727e-05 ± 3.8e-05 s4.102e-06 ± 6.2e-06 s5.022e-05 ± 1.4e-05 s0.15x1.84x
8U1+T(k=0)94.993e-05 ± 2.3e-05 s5.208e-05 ± 2.7e-05 s6.349e-05 ± 1.3e-05 s1.04x1.27x
8U1+T(k=0)+P(p=1)66.931e-05 ± 3.1e-05 s0.0001261 ± 3.3e-05 s7.244e-05 ± 1.2e-05 s1.82x1.05x
10U12524.106e-05 ± 3.4e-05 s4.573e-06 ± 6.5e-06 s5.296e-05 ± 1e-05 s0.11x1.29x
10U1+T(k=0)260.000192 ± 2.8e-05 s0.000109 ± 3.2e-05 s7.799e-05 ± 1.3e-05 s0.57x0.41x
10U1+T(k=0)+P(p=1)160.0001181 ± 3.8e-05 s0.0002278 ± 2.7e-05 s9.259e-05 ± 1.1e-05 s1.93x0.78x
12U19245.739e-05 ± 4e-05 s4.853e-06 ± 6.6e-06 s6.239e-05 ± 1.2e-05 s0.08x1.09x
12U1+T(k=0)760.0001379 ± 4.3e-05 s0.0002948 ± 2.2e-05 s0.0001193 ± 3.1e-05 s2.14x0.87x
12U1+T(k=0)+P(p=1)330.00027 ± 4.5e-05 s0.0005051 ± 2.1e-05 s0.0001217 ± 1e-05 s1.87x0.45x
14U134320.0002793 ± 2.7e-05 s5.454e-06 ± 7.2e-06 s6.463e-05 ± 8.2e-06 s0.02x0.23x
14U1+T(k=0)2460.0003876 ± 3.3e-05 s0.001024 ± 3.1e-05 s0.0002237 ± 1e-05 s2.64x0.58x
14U1+T(k=0)+P(p=1)1130.0007973 ± 6e-05 s0.001431 ± 8.2e-05 s0.0003248 ± 1.5e-05 s1.79x0.41x
16U1128700.0004991 ± 0.00045 s7.169e-06 ± 9e-06 s0.0001502 ± 1e-05 s0.01x0.30x
16U1+T(k=0)8090.001517 ± 0.00035 s0.00407 ± 3.8e-05 s0.0007362 ± 8.6e-06 s2.68x0.49x
16U1+T(k=0)+P(p=1)4220.003208 ± 0.00047 s0.005042 ± 0.00026 s0.001122 ± 9.7e-06 s1.57x0.35x

Spinless fermion — representative lookup (seconds/call, amortized over batch)

NconfignsamplesSymBasisXDiagQuSpin
16U1+T(k=0)+P(p=1)100001.815e-06 ± 1.9e-09 sN/A (no decoupled API)1.868e-06 ± 3e-09 s

Boson (d=3) — basis construction

plot_construction("boson", "Boson (d=3)")
Example block output
NconfigdimSymBasisXDiagQuSpinXDiag/SymBasisQuSpin/SymBasis
6U11417.806e-05 ± 7.8e-05 s4.444e-06 ± 6.2e-06 s6.074e-05 ± 1.3e-05 s0.06x0.78x
6U1+T(k=0)260.000133 ± 6.9e-05 s5.597e-05 ± 2.6e-05 s7.975e-05 ± 1.2e-05 s0.42x0.60x
6U1+T(k=0)+P(p=1)180.0002299 ± 5.4e-05 s0.0001059 ± 3.2e-05 s8.912e-05 ± 1.8e-05 s0.46x0.39x
8U111070.0003047 ± 0.00022 s7.102e-06 ± 7.4e-06 s9.74e-05 ± 1e-05 s0.02x0.32x
8U1+T(k=0)1420.000506 ± 6.8e-05 s0.000252 ± 3.7e-05 s0.0002314 ± 1.5e-05 s0.50x0.46x
8U1+T(k=0)+P(p=1)840.0008095 ± 0.00015 s0.0003862 ± 3.6e-05 s0.0002262 ± 1.6e-05 s0.48x0.28x
10U189530.001359 ± 0.00013 s1.528e-05 ± 2.1e-05 s0.0002916 ± 1.1e-05 s0.01x0.21x
10U1+T(k=0)9020.004391 ± 0.00027 s0.00195 ± 4.3e-05 s0.001504 ± 9.5e-06 s0.44x0.34x
10U1+T(k=0)+P(p=1)4860.00722 ± 0.00043 s0.002477 ± 3.2e-05 s0.001833 ± 2.5e-05 s0.34x0.25x
12U1737890.01077 ± 0.00053 s2.804e-05 ± 9.2e-06 s0.002088 ± 3.3e-05 s0.00x0.19x
12U1+T(k=0)61660.04925 ± 0.0021 s0.01823 ± 0.00013 s0.01413 ± 3.3e-05 s0.37x0.29x
12U1+T(k=0)+P(p=1)31790.07985 ± 0.0023 s0.02173 ± 0.00014 s0.01707 ± 7.8e-05 s0.27x0.21x

Boson (d=3) — representative lookup (seconds/call, amortized over batch)

NconfignsamplesSymBasisXDiagQuSpin
12U1+T(k=0)+P(p=1)100006.818e-06 ± 4.8e-08 sN/A (no decoupled API)3.167e-07 ± 8.7e-10 s