Fock eigensolver benchmark design¶
The decision under #472 is which solver to offer for a specified root count, physical source and hardware budget. The first experiment at retained rank 90 favours dense. Compare candidates at the existing scientific tolerances. The benchmarks belong to the development programme outside the frozen #557 scope. Measured controls and reproduction
Ownership and order of experiments¶
Issue |
Independently startable work |
Dependency for a verdict and decision rule |
|---|---|---|
#895, molecular benchmark |
The Fock owner takes the first real Davidson archive replay. The larger molecular sweep and open-shell capture are claimable alongside #597. |
Use a trusted capture and enumerated spectrum. A cold or recycled strategy loses its case for that regime if complete cost exceeds dense or a frontier cluster is missed. |
#896, periodic benchmark |
Claimable by a benchmark developer using the physical-source contract of the PBC owner under #577. Keep symmetry mapping with #834 and provider qualification with #619. |
Confirm the gap or fractional occupations on dense first. Compare complex block Davidson with cold and per-k recycled guesses offline. Report failure if the purported complex case has only real blocks in the saved gauge. |
#897, filtering |
A solver developer can pin and build a standalone CPU ChASE comparator and test a polynomial recurrence immediately. |
Consume #895 or #896 partial spectra. Drop a regime if filtering loses to dense or recycled Davidson at equal accuracy including setup, or the occupied cluster escapes the filter. |
#898, interior roots |
A comparator developer can pin PRIMME, audit the build and prepare clustered and wrong-root controls independently. |
Use saved physical spectra for a verdict. Keep the comparator external unless it improves correctness or total cost for a named workload. |
Claims go on the individual issues. #825 owns distributed solver and capacity integration. #580 owns correlation consumers and partitions. A replay needs no change to either interface.
Capture and execution contract¶
The producer owns an immutable physical build for the density actually evaluated. Store input and source hashes, kernel, exchange zero mode, support, fit, grid, basis/ECP, geometry, overlap cutoff, precision, ordering and gauge. For each iteration and each spin/k/symmetry channel save F, D, S, the original possibly rectangular X, build and frame IDs, k weights, occupations, chemical potential and energy. Save the DIIS/shifted/effective matrix with its own identity and parent when that was the matrix actually solved. Record terminal confirmation separately. Hash the archive and retain it with runtime evidence.
The replay consumes only that archive. Apply the block operator as \(X^\dagger F(XV)\), reduce a stored matrix once per timed solve as appropriate, and lift Ritz vectors with the same X. Reuse a subspace only within its channel and metric frame. Record diagonal construction in the retained basis, guess width, guard count, expansion widths, restarts, projected matrix sizes, block calls and number of vectors applied. A dense-backed callback measures block work but still stores F. Record fallbacks and exhausted attempts.
Molecular SCF exposes dense and Davidson. ROHF/ROKS require all retained roots
for occupation assignment and canonicalization. Gamma GPW RHF/RKS have a
Davidson path. Multi-k GPW and direct BIPOLE retain their solver restrictions.
At the standalone boundary real LOBPCG is an explicit extremal comparator.
For interior roots, compare real explicit JD and harmonic Davidson to dense
nearest-shift selection. The historical gplhr name calls harmonic Davidson.
Complex and matrix-free requests must pass solver_capabilities.
Systems and size ladder¶
Family |
Fixed case and root policy |
|---|---|
Small controls |
Reuse water RHF/def2-SVP, rank 24, five occupied roots, and the complete Gamma GPW H2/6-31G calculation, rank four, four roots. |
Molecular |
Replay all 19 CH2O/def2-TZVPP evaluations at 8 occupied + 4 guards and all 90 roots. For a larger reproducible RHF ladder, translate the tutorial water geometry by 6 bohr per molecule along x, with 1, 4, 16, 32 then 64 waters and def2-TZVPP. Each neutral singlet has five occupied orbitals per water. Start with four guards, enlarge across clusters and compare all roots separately. Use direct J/K above the four-index memory limit and qualify this source separately. |
Restricted open shell |
Neutral OH doublet, O at origin, H at (0,0,1.83) bohr, def2-SVP. The completed OH comparison uses an oriented HCORE determinant seed for ROHF and quarter-turn averaged ROHF densities for LDA ROKS. Save both physical spin Focks, effective operator and density-defining orbitals. Preserve fractional pi-shell occupations and compare the whole shell. |
Insulator |
Rocksalt LiF, fcc primitive vectors (0,1,1), (1,0,1), (1,1,0) times a/2, Li at origin, F at (a/2,a/2,a/2), a = 4.0351 angstrom. GPW LDA/def2-SVP, zero temperature, eight explicitly weighted shifted Monkhorst-Pack points (fractional components ±1/4). Start with the primitive cell, then replicate 2, 3 and 4 times along each primitive vector with the same mesh per supercell. Use the route’s basis-derived overlap support and record the finite grid/cutoff and GPW settings before timing. Count occupations from the global filling and require a positive measured gap before designating an insulating sample. |
Smeared |
Repeat the existing GPW LDA H2/STO-3G thermal fixture (16 bohr cubic cell, bond 1.4 bohr, 48 cubed grid, kT = 0.01 Hartree) on the shifted eight-point mesh. Verify fractional occupations and compare Mermin free energy. Bound the total omitted weighted occupation by 1e-8 electron against the full spectrum, including all partners of a boundary cluster. The minimal basis can require every band. Repeat with 6-31G to test band truncation separately. Expand guards or use the complete spectrum when the tail exceeds the budget. |
Measure actual retained rank for each member. At rank 2,000 one complex FP64 square block is 64 MB, or 512 MB across eight k points before S, X, densities, histories and solver workspace. Stream one iteration at a time and reuse immutable frame data. Estimate grid, J/K, archive I/O and peak per-rank memory from the preceding size before submitting the next. Record the largest feasible rank and limiting allocation if 2,000 cannot fit. The supercells are distinct finite calculations. Every solver comparison uses identical blocks from one member.
Algorithm experiments and rejection tests¶
Compare real block Davidson on real matrices and Hermitian Davidson on real and complex matrices with cold, recycled and perturbed or reordered guesses. Vary restart capacity at fixed roots, controls and preconditioner. Count actual provider calls and restarts separately. Compare explicit real extrema with standalone LOBPCG.
For the filter prototype, map the unwanted interval to [-1,1], apply a scaled three-term Chebyshev recurrence to the recycled block, orthogonalize, perform Rayleigh-Ritz, and lock only residual-qualified complete clusters. Start bounds from a costed extremal estimate plus margin, verify Ritz containment each sweep and expand bounds or refuse a failed bound. Test an underestimated upper edge and a vanishing occupied gap. Record degree, applications, QR, bounds repair and convergence. Give ChASE the identical retained pencil, initial span, roots, buffers and hardware.
Start PRIMME v3.2.3 in a separate executable on the retained standard problem. Match real/complex block actions, preconditioner, target shift and residual normalization. Pin source and build hash, compiler, BLAS integer ABI and linkage. Its core BSD terms require preserving notices. Audit the separate test-code terms, binding and transitive libraries before packaging. An optional Python extra would need lazy loading and a clean missing-library refusal. GPU toolkit and MPI builds require separate ABI, license and hardware measurements. Apply the same release-specific review to ChASE before shipping anything. PRIMME release and license.
At each solve measure \(FC-SC\varepsilon\), the retained residual, \(C^\dagger SC-I\) and leakage outside \(XX^\dagger S\). Check the original S and X against the capture, along with source, occupation and electron count. Compare occupied and degenerate subspaces by metric principal angles. At a crossing permute and rotate the seed, omit an exact wanted direction, cut a cluster with too few guards and force iteration exhaustion. Record whether the selected roots match the full spectrum even when residuals vanish. For larger interior intervals a validated Hermitian inertia difference needs endpoint and multiplicity checks, plus the actual factorization cost. A stopped SCF gets a failure row.
Measurement and claim levels¶
Use FP64/complex FP64 and the same machine, BLAS, thread affinity and budget for each pair. Record Python and native hashes, versions, CPU/GPU model, devices, MPI ranks and per-rank threads. Warm each configuration once, balance order, keep individual trials, median, range, completed steps and failures. Report Fock construction, S/X setup, forward/back transforms, preconditioner or filter setup, bounds, QR, restart, projected solves, checks and I/O. Time device transfers, synchronization and collectives where applicable. Report peak resident/device memory per rank and aggregate. Keep uninstrumented whole-SCF time, all SCF iterations and terminal energy/density/Fock comparison alongside the instrumented replay. Mark unavailable counters explicitly.
Track three verdicts per route. Source landed identifies executable code on main. Scientific acceptance identifies the containing runtime, vq job, matched reference and exact finite case. Scaling evidence requires several real ranks or root fractions with the same-resource dense baseline. The accepted water, Gamma H2 and CH2O cases establish bounded controls. Larger-system, complex multi-k and accelerator performance remain open.