Skip to content

Observable-grid measurements

Benchmark index and methodology · Current capabilities

These are dated October 2026 measurements. Hardware, precision, providers and timing scope belong to each record; later capabilities do not change what was measured. Reproduction commands describe those workloads, not recommended defaults.

Initial measurement

On an Intel Core i7-12700KF, GCC 13.3 Release (-O3, no fast-math), oneTBB 2022.3, and Uni20 a25159cc, the binary128 grid workloads gave these median grid wall times over three repeats on 16 October 2026, using the previous batched adapter. These are historical baselines, not measurements of continuous execution. Both OPENBLAS_NUM_THREADS and OMP_NUM_THREADS were 1; the MPLAPACK 3.0.0 binary128 provider was an optimized Release build. This was a shared workstation, not an isolated scaling experiment.

Workload Points Preparation (s) 1 worker (s) 2 workers (s) 4 workers (s) 8 workers (s)
Half-filled Hubbard holon 257 0.000006 52.53 26.81 13.89 7.358
Doped Hubbard holon 65 0.7532 4.796 2.472 1.304 0.7114
Lieb–Liniger Type I 4097 0.01124 2.822 1.413 0.7690 0.4369

All these points converged with identical ordered energy checksums. Grid times include collection but exclude the one-time preparation and table I/O: the 8-worker speedups are 7.14, 6.74 and 6.46 respectively. Including preparation reduces the small doped-grid speedup to 3.79. Median process CPU times increase from 52.53 to 55.69 s, 4.796 to 5.133 s, and 2.822 to 3.291 s. Median collection plus batch-storage overhead is below 0.3 ms for every configuration. Whole-process peak RSS across each complete sweep was 5.15, 4.66 and 4.68 MiB respectively.

A separate single-pass frontend check included preparation and JSON streaming with --no-retain, comparing complete rows at 1/2/4/8 workers in all three precisions. In binary128, 1-to-8-worker elapsed times were 7.126 to 1.019 s (33-point half-filled holon), 19.83 to 3.287 s (257-point doped holon), and 2.789 to 0.4161 s (4097-point Type I). Peak RSS over all frontend checks ranged from 5.2 to 6.1 MiB. Small binary64 workloads were already only milliseconds long; their output and scheduling overhead make speedup much less informative.

On the dense Type-I grid, native 80-bit long double reported one mesh_limit at p=5.412109375 with the default numerical controls. That row, its missing energy, and the partial outcome were identical at every worker count; binary64 and binary128 completed this grid. Parallelism preserves these numerical diagnostics rather than changing the tolerance or silently dropping points.

Hubbard branch scheduling

A matched frontend comparison on 28 October 2026 measures the additional effect of removing the wait between Hubbard branches. The baseline is Bethe 46b636e, which already uses a continuous window within each branch. The new version puts all selected branches in one window. Both prepare a doped background once; this comparison does not measure a change in preparation cost.

The Intel Core i7-12700KF workstation used GCC 13.3 Release, oneTBB 2022.3, Uni20 04163b9b and optimized MPLAPACK 3.0.0. Both builds used the same dependencies and one BLAS/OpenMP thread. These are medians of three complete process runs, reversing measurement order on alternate repeats, including preparation and CSV output with retention disabled.

Workload / version Rows 1 worker (s) 4 workers (s) 8 workers (s) CPU at 8 workers (s) Peak RSS at 8 workers (MiB)
Half-filled, separate branches 195 34.13 8.85 4.72 35.33 7.00
Half-filled, shared window 195 34.22 8.82 4.48 35.25 7.50
Doped, separate branches 387 21.59 6.13 3.53 22.46 7.19
Doped, shared window 387 21.56 6.12 3.48 22.43 7.64

The workloads use all three branches at U=4 in binary128: 65 points per branch at half filling and 129 at density 0.5. All full CSV outputs, including diagnostics and failed-value fields, match byte for byte between versions at 1/4/8 workers; every point converged. Reproduce each workload with:

OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 bethe-hubbard-dispersion \
  --u 4 --points 65 --precision fp128 --threads 8 \
  --format csv --no-preamble --no-retain > half.csv
OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 bethe-hubbard-dispersion \
  --u 4 --density 0.5 --points 129 --precision fp128 --threads 8 \
  --format csv --no-preamble --no-retain > doped.csv

Vary --threads and compare equally configured builds. The incremental wall-time reduction here is modest (about 5% and 1% at eight workers), and the smaller difference should not be generalized from a shared workstation. The substantial serial-to-parallel benefit was already present in the baseline. The shared window removes unnecessary branch waits and permits single-momentum queries across branches to overlap; the separate Async example demonstrates composable preparation and dependent curves without introducing another numerical solver.

Thermodynamic XXX streaming measurement

The thermodynamic XXX frontend now collects directly into its output tables. With --no-retain, it no longer stores a second full spectrum in memory. The numerical kernel is unchanged. Both implementations produce identical CSV rows, including density, estimated error, evaluation count and status.

The 28 October 2026 comparison uses a fresh build of Bethe 46b636e and the streaming frontend, both with Uni20 04163b9b, GCC 13.3 Release and oneTBB 2022.3 on an Intel Core i7-12700KF (12 physical cores, 20 logical CPUs). It is a shared workstation; short timings are indicative, not isolated scaling measurements. BLAS and OpenMP each use one thread. Three repeats alternate the old/new execution order, reporting medians. The entire process is timed, including CSV formatting. CSV output goes to /dev/null, except the first one-worker pair, which is saved and compared byte for byte. Native formats group 16 points per task; binary128 uses individual points to balance variable quadrature costs.

Reproduce each row with either executable, selecting N as 1, 4 or 8:

OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 /usr/bin/time -v \
  bethe-xxx-structure-factor-thermo --momentum-points 257 --points 1025 \
  --precision fp64 --threads N --format csv --no-preamble --no-retain > /dev/null

For binary128 use --momentum-points 129 --points 257 --precision fp128. An exterior-only control uses --momentum-points 1000 --points 1000 with --omega-min -2 --omega-max -1 --precision fp64: all one million values are zero, so output and scheduling dominate. This control tests memory scaling, not useful numerical speedup.

Grid / arithmetic Workers Old / new wall (s) Old / new CPU (s) Old / new peak RSS (MiB)
257 × 1025, binary64 1 1.13 / 1.13 1.12 / 1.47 16.71 / 4.82
257 × 1025, binary64 4 0.56 / 0.49 1.28 / 1.87 16.72 / 4.66
257 × 1025, binary64 8 0.45 / 0.37 1.37 / 2.60 16.70 / 4.84
129 × 257, binary128 1 68.79 / 68.60 68.78 / 68.70 7.33 / 5.30
129 × 257, binary128 4 18.20 / 17.77 70.22 / 70.13 7.34 / 5.28
129 × 257, binary128 8 9.86 / 9.29 71.89 / 71.90 7.34 / 5.31
1000 × 1000, exterior binary64 1 0.79 / 1.13 0.79 / 2.26 50.31 / 4.69
1000 × 1000, exterior binary64 4 1.11 / 1.17 1.21 / 4.49 50.31 / 4.81
1000 × 1000, exterior binary64 8 1.11 / 1.15 1.34 / 7.43 50.27 / 4.82

The physical binary128 grid takes about 7.4 times less wall time at eight workers than at one, with similar total CPU work. Binary64 physical-grid wall time also improves over the batched frontend, but scheduling and overlapping output consume more CPU time. The exterior-only control gains no useful speedup; one worker is preferable for such cheap grids. Its peak RSS falls from about 50 MiB to about 5 MiB with table retention disabled. The momentum and frequency axes still occupy storage proportional to their individual lengths.

Thermal Lieb–Liniger temperature scans

On 28 October 2026, the thermal frontend was compared with a fresh serial baseline at Bethe 46b636e, using identical GCC 13.3 Release builds, Uni20 04163b9b and oneTBB 2022.3 on an Intel Core i7-12700KF. BLAS/OpenMP each used one thread. Each row below is the median of three complete-process timings, including CSV formatting with --no-retain; execution order alternated between repeats. All exported rows, including error estimates and iteration counts, matched the baseline exactly at every concurrency. The workstation was shared, so these are workload examples rather than isolated scaling measurements.

Both ensembles use c=4 and a uniform temperature scan from 1 to 2. Reproduce the binary128 grand-canonical case with:

OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 /usr/bin/time -v \
  bethe-lieb-liniger-thermal --c 4 --temperature 1 --temperature-end 2 \
  --points 33 --mu -1 --precision fp128 --threads 8 \
  --format csv --no-preamble --no-retain > /dev/null

The binary64 cases use 257 points at --mu -1, or 129 points at --density 0.1, with --precision fp64. Numerical controls otherwise keep their precision-dependent defaults. The old baseline has no --threads option.

Ensemble / arithmetic Points Old serial (s) 1 worker (s) 4 workers (s) 8 workers (s) Old / 8-worker CPU (s) Old / 8-worker peak RSS (MiB)
Fixed mu, binary64 257 0.53 0.54 0.14 0.08 0.52 / 0.59 6.61 / 11.18
Fixed density, binary64 129 1.88 1.91 0.48 0.26 1.87 / 2.01 6.69 / 11.68
Fixed mu, binary128 33 47.75 48.03 13.37 7.45 47.74 / 49.70 9.99 / 33.80

The binary128 scan gains about 6.4 times in wall time at eight workers, with about 4% more total CPU work than the old serial frontend. Independent solver workspaces increase peak memory with concurrency; bounded result admission does not bound total solver scratch independently of worker count. Single-point requests and very short scans have no corresponding parallel benefit.

Hubbard continuum frontend

Independent total-momentum queries also scale for continuum edges: the outer grid can overlap each point's quadrature, inversion and charge-channel extrema search. The inner algorithms and stopping rules are unchanged. The frontend uses the shared 128-point admission window and writes ordered rows on the caller.

The following measurements on 28 October 2026 compare the serial frontend at Bethe 46b636e with this continuous-grid implementation. Both builds used Uni20 04163b9b, GCC 13.3 Release (-O3, no fast-math), oneTBB 2022.3 and the same optimized MPLAPACK 3.0.0 configuration on an Intel Core i7-12700KF. These are whole-command wall/process-CPU times and peak RSS, including startup and CSV formatting. Three repeats alternate command order on a shared workstation, with no simultaneous compilation. BLAS and OpenMP each use one thread. All complete CSV rows match the serial baseline exactly at 1/4/8 workers, including the error estimates, work counts and status columns.

From the corresponding build directory, the two workloads are:

OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 \
  ./bethe-hubbard-continuum --u 4 --channel two-spinon --points 129 \
  --precision fp128 --threads 8 --format csv --no-preamble --no-retain
OPENBLAS_NUM_THREADS=1 OMP_NUM_THREADS=1 \
  ./bethe-hubbard-continuum --u 4 --channel spinon-holon --points 65 \
  --search-tolerance 1e-7 --position-tolerance 1e-5 --tolerance 1e-10 \
  --precision fp64 --threads 8 --format csv --no-preamble --no-retain

Use --threads 1 or --threads 4 for the other measurements; omit that option for the old serial frontend. The looser charge controls are part of the benchmark definition, not a change to the defaults or a certified error bound.

Median wall times:

Family Precision Points Old serial (s) New 1 worker (s) New 4 workers (s) New 8 workers (s)
Two spinons binary128 129 28.55 29.64 7.65 3.95
Spinon–holon binary64 65 18.79 18.79 4.89 2.64

Relative to the old serial loop, eight workers give 7.23x and 7.12x speedups. Process CPU time increases from 28.55 to 30.64 s and from 18.78 to 19.65 s; peak RSS increases from 4.22 to 5.45 MiB and from 4.22 to 6.41 MiB. The new single-worker two-spinon path costs about 4% more than the old loop, while the charge workload is unchanged at this timing resolution. Thus the benefit is concurrent expensive queries; small grids need not become faster. Per-query numerical scratch grows with active workers even though admission and retained results are bounded.