We compare HST against exact sparse-delta paths a technical team would actually try first: CSC delta, grouped CSC, and hand-tuned tile traversal where appropriate. Every run is interpreted alongside locality, visited nonzero fraction, error, and fallback behavior.
Four columns are withheld from the published sweep, and this is what they were. The raw file records how many nonzeros each path visited, and their ratio. That ratio is the rule the runtime uses to split an update between its two paths, so we do not publish it — the same fields are withheld from our released research CSVs for the same reason, and it would be odd to hold the line there and not here. Withheld: density, csc_touched_nnz, hst_scanned_nnz, active_tilerow_nnz. Nothing on this page depends on them. Every ratio we quote is a ratio of two timings, and both timings are still in the file — hst_flat_vs_csc_reuse is csc_reuse_flat_ms / hst_sched_flat_ms, hst_flat_vs_active is active_flat_ms / hst_sched_flat_ms, and the same holds for all nine ratio columns. Recompute any figure here from the timings and you should land on the number we printed; if you do not, we would like to know.
All timing is in-process wall clock against the standalone C++ runtime; HST ships as an embedded library, so there is no transport in the measured path. Publishable reports pin matrix size, seed, update pattern, active columns, tile size, budget, error target, hardware, and date.
Unless a table says otherwise, every number on this page comes from the v10 high-locality sweep run on 2026-06-30 on an Apple M1 Max (arm64, 64 GB), and the raw CSVs for it are published under /benchmarks/. The headline figures are steady-state at batch width 8, with the schedule reused across calls. Both conditions move the result: the same sweep at batch width 1, or without reuse, is close to parity or below it. Rebuilding the same source under a second compiler, on one machine over the same operator set, has moved results by 3–7x against the first compiler as baseline — larger than any algorithmic change we have made. That comparison was run on our x86 bench box rather than on the machine this sweep used, so it bounds the risk without describing this run. A number is only comparable against another built the same way, and this sweep’s CSVs do not record which compiler built it, which we are treating as a gap rather than a detail.
Why batch width 8 and not 16. Batch width 16 is the most flattering column in this sweep and we have stopped quoting it as a headline. Two of our own sessions on the same harness disagree on it by about 23% while widths 1 through 8 reproduce between the same sessions to under 1%, and at width 16 the harness dispatches its baseline through a different hand-written code path than the one widths 1–8 use — so the comparison is not the same comparison. Until that is settled, the width-16 figures below stand as recorded, not as claims. Width 8 is the widest column we are willing to lead with.