Skip to content

Increment 21c: measurements for choosing 21d (C, A1, A0, evaluate-once); 21d deferred - #104

Merged
skavhaug merged 6 commits into
masterfrom
increment21c-measurements
Sep 27, 2026
Merged

skavhaug merged 6 commits into
masterfrom
increment21c-measurements

Conversation

@skavhaug

Copy link
Copy Markdown
Member

What

Measurement only, no production code (docs/benchmarks/2026-09-27/21c/README.md). Simulations are unapplied patches kept as evidence.

  • Option C (batch, then parallel flips): +6.5 to +10 % triangles on the 1 m quarter circle, fails Ola's 2 % rule.
  • Option A1 (deterministic reservations, hashed priority): +0.9 to +1.4 %; its mesh equals today's serial loop run in hash order. Worst angle depends on the seed.
  • Option A0 (reservations, index priority): bit-identical to today on both domains (on these two inputs, not proven). With the evaluate-once rule, 2.1 evaluations per mark; modelled refine at 8 threads 7-11 % faster than today, slower at 4.
  • Footprint extents (bears on B), dependence depth of the index order, split re-measured after 21a/21b, a sync micro-benchmark (spawn ~96 µs, barrier ~0.9 µs at 8 threads).
  • 21d is deferred behind the basin work (Ola, 2026-09-27: "Review and push 21c, then basin-work"). ROADMAP updated.
  • .claude/agents/perf.md: sanitize a scratch build before running it for numbers; keep deliberate crash plants out of default loops (Ola's yes). ROADMAP: a Release-hardening row (Ola's yes).
  • docs/increments/21-parallel-refine.md status line brought up to date.

All figures battery; no AC baseline. Model vs measurement labelled throughout.

Review

@Reviewer: CHANGES REQUESTED once (three prose claims), APPROVED at 3c71c86. The analysis scripts reproduce their tables byte for byte; patches apply on the base they name.

🤖 Generated with Claude Code

skavhaug and others added 6 commits September 27, 2026 20:09
…+1.3 %

Measurement only (docs/increments/21-parallel-refine.md sections 5, 6 and 7
item 2), on the 1 m benchmark at 7f688aa, battery. Scratch simulations in
scripts/sim.patch (unapplied); every simulated mesh passes a full rescan
and the constrained Delaunay check, and each check was shown to fail on a
planted defect.

- C (batch insert + parallel flip rounds) misses Ola's 2 % rule on the
  quarter circle: +10.0 %, +7.5 % with section 5's thinning, +6.5 % with
  two-hop thinning; worst angle worse in every variant.
- A1 (hashed-priority reservations): +0.86 to +1.27 %, max degree no worse;
  worst angle better or worse depending on the hash seed. A1 gave the same
  mesh as the serial loop in hash order.
- 7.4 % of footprints leave a 32-node halo (1.0 % at 128).
- Today's index order has dependence depth 13-19 in the big rounds.
- Split phase at 7f688aa: 92.6 ms at 1 thread, 96-98 ms at 8.
- bench.py's tolerance check trusts refine's reported max_error and misses
  a stale-scan defect that a full rescan catches.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…t 8 threads only C beats today clearly

A0 (reservations, priority = slot index, today's skip rules, end-of-round
renumbering) gives today's mesh on the quarter circle and the tile: same
sha256, counts, and mesh hash after every round, 0 order violations. Its
sub-rounds are close to A1's on the quarter (469 vs 447) but reach 101 in the
tile's first rounds. Each mark is evaluated about 4 times, so the model puts
A0 and A1 at 81-102 ms of split at 8 threads with a barrier team (today's
serial split 92.6 ms), C at 50-52 ms; with fresh threads per step none of
the reservation variants beats the serial split. Model, battery, labelled.

Scratch only: scripts/sim_a0.patch on top of scripts/sim.patch, never in include/.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… hardening after 21d (Ola)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…led refine 7-11 % faster than today at 8 threads

Simulated the rule "compute a mark's footprint once; re-evaluate only when a
slot of it was written (write versions) or its node's footed status changed"
in three dirty-set variants (scripts/sim_a0_eo.patch, unapplied, on top of
sim.patch and sim_a0.patch). Today's `touched` set is an exact dirty set
(argued, and 0 stale re-uses measured). All variants are bit-identical to
today on quarter and tile (sha256, per-round lattice hash, A0's sub-round
lists), with plants shown to fail. Evaluations per mark fall from 3.5-4.0 to
2.1, not 1; the model at 8 threads gives split 80 / 84 ms and refine 144 / 169
ms against today's measured 161 / 181. Scan and rest measured at 4, 8 and 16
threads. The five crash reports were the deliberate eo_stalecommit plant;
the modes are clean under UBSan with libc++ hardening. Battery throughout.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…f.md's sanitizer rule fits what runs here

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…e 20:57 sleep; labels, pointers and the fifth crash report

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@skavhaug
skavhaug merged commit c337707 into master Sep 27, 2026
8 checks passed
@skavhaug
skavhaug deleted the increment21c-measurements branch September 29, 2026 21:46
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant