Benchmarks

Two scripts produce everything on this page, and every table regenerates verbatim:

julia --project=docs docs/scripts/distributed_solve_benchmarks.jl   # solve cost, memory
julia --project=docs docs/scripts/distributed_solve_comparison.jl   # makespans, ordering, hops, wall clock

All measurements are on real harmonic-extension systems: sheaf Laplacians (stalk dimension 2, identity restriction maps) over each formation, targets pinned, $H$ the free–free Dirichlet block. Slot counts and memory are exact and machine-independent. Timings are minimum-of-runs on one machine.

Exactness

The workspace and distributed solves reproduce the monolithic CliqueTrees.Multifrontal answer to machine precision on every topology and size tested (max relative residual $\sim 2\times10^{-16}$), and the real four-process run below agrees to $9.5\times10^{-17}$. Nothing on this page trades accuracy for anything.

Communication makespan: the full tables

Slots to complete one solve (or reach $\varepsilon = 10^{-6}$, for the iterative methods), under the model of the comparison page. tree (ND) is the distributed tree under a nested-dissection ordering. The fewest-slots cell in each row is highlighted.

grid

agentstreetree (ND)central (base)central (in-net)RichardsonChebyshevCG (+all-reduce)κ(H)
5926161181162060252252074.4
139562227827659804285992216.4
25192265025041234061611088446.6
395146307907922136080817776772.9
5711843411421148331961008262081201.4

chain

agentstreetree (ND)central (base)central (in-net)RichardsonChebyshevCG (+all-reduce)κ(H)
1422828261252138207090.5
305412605853722868866388.8
621181612412222216582366661607.9
126246202522509030211741490986536.2
25450224508506364080235660078026353.0
51010142810201018146206447202411920105827.7

ring

agentstreetree (ND)central (base)central (in-net)RichardsonChebyshevCG (+all-reduce)κ(H)
15248304014261482516103.1
315612628857262969768414.3
631201612618422926592384801659.4
127248202543769173011841527366639.5
25550424510760366942236660806226560.1
51110162810221528146779247302426490106242.3

star

The degenerate case: one hub sits in every separator, so the tree collapses to a single chunk and ties the coordinator, and nothing beats either.

agentstreetree (ND)central (base)central (in-net)RichardsonChebyshevCG (+all-reduce)κ(H)
15262630282457016248120254.0
631221221261241753422288301441504094.0
255506506510508114984022471932235966065534.0

random geometric

No nested-dissection construction is applied here, so the two tree columns coincide and share the win.

agentstreetree (ND)central (base)central (in-net)RichardsonChebyshevCG (+all-reduce)κ(H)
308860582454120708910154.4
622222124122144396630028000580.6
1262222252250144320695234128474.8
254525250850641542812844434721156.4

Four log-log panels (grid, random geometric, ring, chain) showing makespan versus fleet size for all six methods, with the distributed tree at the best ordering sitting lowest in every panel

Two readings worth pulling out of the tables:

  • On every formation with sublinear separators, tree-ND grows like the plots' flattest curve ($O(\log n)$) while both centralized variants grow linearly and the iterative methods grow with $\kappa(H)$.
  • $\kappa(H)$ itself grows with formation size (it is over $10^5$ on the 510-agent chain), so diffusion's disadvantage compounds with scale. Its locality is not the bottleneck. Its conditioning bill is.

The ordering study

The elimination ordering sets the tree's depth, and the depth sets the makespan. Nested dissection here is three lines of Julia (recursively eliminate interval/box middles last), with no external graph partitioner:

Smaller of each metric pair highlighted: nested dissection wins depth and slots, the default order wins fill, which is the trade the study is about.

topologyagentsdepthdepth (ND)slotsslots (ND)fillfill (ND)
chain6260611816240412
chain25425285022410081916
chain510508910142820323948
ring5115091010162820363952
grid2514510922665168076
grid5719314184341981624708

Left: elimination-tree depth versus chain length for the default order and nested dissection, against n and log n guide lines. Right: the resulting makespans, with the centralized cost for scale

The trade is explicit: on the 510-agent chain, nested dissection buys a 36× makespan reduction (1014 → 28 slots) for a 1.9× fill increase (2032 → 3948 stored entries). Depth tracks the $\log_2 n$ guide line almost exactly. For a deployment this is nearly always the right trade, since communication slots are wall-clock and battery, and a doubled factor is kilobytes.

The physical routing overlay

Measured hop distributions for tree messages over the physical radio graph (discussion and caveats on the comparison page):

formation, orderingmessagesmean hops1-hop sharetotal transmissions
20×20 grid, default order35512.33%4368
20×20 grid, nested dissection2669.818%2605
random geometric, $n = 254$713.17%224

Hop-count histograms for the 20×20 grid and the 256-agent random geometric graph

Solve cost on one machine

Left: per-solve time versus problem size for the CliqueTrees monolithic solve, the recursive tree solve, and the workspace tree solve. Right: one-time factorization cost versus the per-step re-solve cost

The preallocated TreeWorkspace solve tracks the monolithic CliqueTrees solve within a few percent (the allocating recursive reference is $\approx 5\times$ slower), and the per-step re-solve is roughly an order of magnitude cheaper than the factorization it reuses. Every "per-step" number in this guide is a re-solve against a cached factor. The factorization is paid once per formation and reported separately.

A real multi-process run

solvewall timevs single processagrees to
single process, workspace0.053 msn/a
4 worker processes, RemoteChannel3.078 ms58× slower$9.5\times10^{-17}$

Local worker processes share one machine, so this measures serialization and channel protocol overhead and verifies exactness. It is not a radio simulation (the slot tables are the communication model). The number worth keeping is that this is real inter-process message passing, exact to the last bit.

Per-agent memory

Left: factor-slice size held by each worker for a 24×24 grid, with the mean marked. Right: centralized single-node storage versus worst-case and mean per-worker storage across sizes

The per-worker slices are balanced around their mean and sum exactly to the centralized factor, so there is zero duplication, by the disjoint-residuals argument of the multifrontal page. On a 24×24 grid across twelve workers, the busiest worker holds 12% of the full factor.