HorneSci

Demo

Same answer. Less time.

One fixed model. Its inputs change, and every output is needed after every change.

Recompute everything

0.0 ms per job

Textbook incremental update

0.0 ms per job

Delta Routing

0.0 ms per job

Compute Start, load, save and check

12% less time than the textbook incremental update

22% less than recomputing everything. Synthetic test matrices.

Same output as recomputing everything, byte for byte.

2.1–8.2×

Updating only what changed, against the best full recompute (Intel oneMKL and PyTorch included), on 21 real-world matrices. Read the paper

Why

  1. Only the outputs a changed input reaches are recomputed.
  2. Those outputs are computed four at a time, each in its original order, so every bit matches.
  3. When more than one input in sixteen changes at once, or a run is too short to pay for setup, it recomputes everything, still four rows at a time.
Run it on your workload

Synthetic test matrices, replayed from times measured in C++ on one Intel i7-1165G7 core, turbo off, GCC 13, 13 October 2026. 120 complete jobs per method across five change patterns; Mixed weights them equally. Each job starts a fresh process, loads a synthetic 4,096 by 4,096 sparse matrix with exactly 64 entries in every row, applies 8 or 64 updates, and writes and checks every output. The textbook update recomputes every row a changed input reaches, in original order. The real-world figure is from 21 SuiteSparse matrices in How the Dirty Set Moves: a direct column-by-column incremental update against the best of eight full-recompute codes.

HorneSci