fasterhenry

Benchmarks

Two kinds of measurement, kept apart. The FastHenry comparison is operator-run, by hand, on one machine, and CI never runs FastHenry. The criterion suite and the scaling run are scripted. Everything on this page is rendered by site/build.py from docs/benchmarks.md; no number is typed into the page.

Machines

Speed against FastHenry

deckfilamentsFastHenry (multipole, 1 thread)fasterhenry (dense, 28 threads)fasterhenry (dense, 1 thread)
spiral4831 ms10 ms—
plane_trace~25021 ms13 ms—
serpentine1 00069 ms73 ms—
serpentine5 0004.52 s2.06 s31.6 s
serpentine19 600103.7 s83.4 s1 475 s
serpentine80 000did not finish (> 30 min)not attempted (dense)—

Operator-run; method and caveats are in docs/benchmarks.md. The decks and the build of FastHenry are described in its Setup section.

Criterion bench suite

Not yet regenerated by CI — run .github/workflows/bench.yml (workflow_dispatch) or cargo bench -p fasterhenry --bench assembly --bench solve && python3 tools/bench_table.py locally to fill this in.

Regenerated by .github/workflows/bench.yml via tools/bench_table.py, which parses criterion’s own JSON output. Locally: cargo bench -p fasterhenry --bench assembly --bench solve && python3 tools/bench_table.py.

Scaling: dense vs pFFT + GMRES

Log-log plot of wall clock against filament count for the dense and the pFFT plus GMRES paths
Wall clock of assemble + one-frequency sweep, single thread. The dense arm stops where its model memory no longer fits; the table below is the data.
filamentsloopsdense sdense modeldense peakiterative siterative modeliterative peakGMRES its
9607200.8424 MB61 MB1.7153 MB55 MB5
2 4001 8004.15150 MB227 MB4.69129 MB130 MB5
4 7603 57020.9589 MB635 MB8.95240 MB223 MB5
9 8007 3501562 497 MB2 198 MB19.4487 MB416 MB5
29 92822 446not attempted23 GB—60.91 474 MB1 204 MB5
99 22474 418not attempted256 GB—2074 803 MB3 831 MB5

Reproduce: cargo bench -p fasterhenry --bench scaling -- __report_only__. CI does not run this suite; it gates the headline with iterative_path_holds_its_scaling_headline in perf_smoke.rs.