Repository navigation
rational: the construct ratchet leg carries its input fixture, as the siblings' do - #78
Merged
Merged
Conversation
… siblings' do rational's construct_q15_eco was construction alone — the Q15 by-4 chain's two designs and tables, then four zero frames — while async's construct_q15 and bridge's construct_*_q15_eco (since the comparison freshness PR) are their Q15 workloads with the stream removed: the converter built, the same 0.25 s input fixture synthesized, one block processed. The leg is now the same shape here: down2_down2_q15_eco minus it is the streaming loop alone, and the fixture's libm sin() — soft-double on the M33 — sits in the leg, not in the difference. Re-recorded on all three targets (arm-none-eabi-gcc 13.2.1, CodeLinaro 19.1.5, qemu 8.2.2 with the tree's plugin): M33 777,433 -> 26,810,642, M55 34,522 -> 1,567,568, Hexagon 193,048 -> 8,341,715 — 43 % / 5.6 % / 38 % of the chain's total, leaving the streaming loop at 372 / 277 / 145 instructions per stereo frame. The chain workload itself re-measures identically on every target. The local harness reproduces the committed baselines to within +52..+545 instructions per workload (one M55 row, ratio23_q15_eco, sits +1.9 % since the DspTap bumps after the 2026-10-02 record; untouched here). README table regenerated; PLAN.md's hand-kept table carries the row and the provenance. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G3HxzEGiZp7jStoMuYNuBK
tap
pushed a commit
that referenced
this pull request
Oct 10, 2026
The comparison plan (#73, #75, #76, #77) and its follow-up (#78) closed; this is the plan for what the family's plans and ledgers still carry open, sequenced into twelve weeks in three blocks, with "production-ready" defined as a thirteen-row checklist per engine so the verdict can be checked rather than believed. Drafted and then audited by two independent adversarial reviews (one against the trees' facts and settled decisions, one against engineering judgement). The audit changed the draft materially: the book's bridge chapters are done (#68), so they are off the list; rational has no cross-engine validation by design (scipy and decimate.h are its legs); TSan runs async only; four host compilers and three QEMU targets, not the draft's counts; the +1.9 % M55 ratio23_q15_eco drift is ab8fea3's stated move, not a DspTap bump, and the chain rows sit +926/+1,102; the hardware block never ran bridge or rational on silicon; nothing builds with -fno-exceptions; TSan has never seen the converter with two threads; no footprint, stack or worst-single-call figure exists; Setup 1's "< 1 ppm" criterion tests the counting, not the servo, and cheap USB dongles may not own a crystal; the timestamp servo is a four-to-five-week extension, not an overload, and must not be frozen in the release that adds it; "C ABIs frozen" needs a reconciled NULL model, an extension rule, SOVERSION and a compat test. Section 7 holds the six decisions the maintainer takes before week 1, each with a recommendation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G3HxzEGiZp7jStoMuYNuBK
tap
pushed a commit
that referenced
this pull request
Oct 10, 2026
The comparison plan (#73, #75, #76, #77) and its follow-up (#78) closed; this is the plan for what the family's plans and ledgers still carry open, sequenced into twelve weeks in three blocks, with "production-ready" defined as a thirteen-row checklist per engine so the verdict can be checked rather than believed. Drafted and then audited by two independent adversarial reviews (one against the trees' facts and settled decisions, one against engineering judgement). The audit changed the draft materially: the book's bridge chapters are done (#68), so they are off the list; rational has no cross-engine validation by design (scipy and decimate.h are its legs); TSan runs async only; four host compilers and three QEMU targets, not the draft's counts; the +1.9 % M55 ratio23_q15_eco drift is ab8fea3's stated move, not a DspTap bump, and the chain rows sit +926/+1,102; the hardware block never ran bridge or rational on silicon; nothing builds with -fno-exceptions; TSan has never seen the converter with two threads; no footprint, stack or worst-single-call figure exists; Setup 1's "< 1 ppm" criterion tests the counting, not the servo, and cheap USB dongles may not own a crystal; the timestamp servo is a four-to-five-week extension, not an overload, and must not be frozen in the release that adds it; "C ABIs frozen" needs a reconciled NULL model, an extension rule, SOVERSION and a compat test. Section 7 holds the six decisions the maintainer takes before week 1, each with a recommendation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01G3HxzEGiZp7jStoMuYNuBK
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What this changes
The follow-up noted on #77.
rational'sconstruct_q15_ecoratchet leg becomes the Q15 by-4 chain's workload with its stream removed — the chain built, the same 0.25 s input fixture its streaming workload synthesizes, then one 32-frame block — the shapeasync'sconstruct_q15andbridge'sconstruct_*_q15_ecohave had since #73. Its three baselines are re-recorded; the README table is regenerated;PLAN.md's hand-kept table carries the row and its provenance.Why
Until now rational's leg was construction alone (two designs and tables, then four zero frames), so
down2_down2_q15_ecominus it was the streaming loop plus the fixture, where the siblings' differences are the loop alone. On the M33 the fixture's 12,000 libmsin()calls are soft-double and dominate: with the fixture in the leg, the by-4 chain's streaming loop is a first-class number on every target, read the same way across the family.Verification
tools/qemu_insn_pluginbuilt from the tree): M33 777,433 → 26,810,642, M55 34,522 → 1,567,568, Hexagon 193,048 → 8,341,715 — 43 % / 5.6 % / 38 % of the chain workload's total, leaving the streaming loop at 372 / 277 / 145 instructions per stereo frame.down2_down2_q15_ecore-measures identically on every target after the rebuild (the source file is shared by all fourteen binaries). The local harness reproduces the committed baselines to within +52…+545 instructions per workload; one M55 row,ratio23_q15_eco, has sat +1.9 % since the DspTap bumps after the 2026-10-02 record and is untouched here (within the gate, not this PR's).-Wconversion -Wsign-conversion -Werrorfor scenarios 11 and 8; clang-format clean; retired-words clean;update_icount_docs.py --engine rationalidempotent.Notes for the reviewer
PLAN.md: under a million instructions everywhere for the two designs and tables by themselves, which is why the comparison document's construction column for this engine is mostly fixture.--compare-jsonmode.🤖 Generated with Claude Code
https://claude.ai/code/session_01G3HxzEGiZp7jStoMuYNuBK
Generated by Claude Code