Skip to content

Commit da06bac

Browse files
2.6.0: the performance pair, and the breaking changes under their own heading (#1941)
v2.5.0 (the 1957th) and the 2549th measured together on one machine. Derivate allocates 5.5% more, in five baseline steps each inside the gate; recorded as unattributed. Claude-Session: https://claude.ai/code/session_012sonx8iAspMiwRwokT1Ura Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
1 parent 001b1ca commit da06bac

2 files changed

Lines changed: 101 additions & 1 deletion

File tree

‎BREAKING-CHANGES.md‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ A not-equal written `<>` is read as `not (a = b)`, and printed that way.
4040

4141
---
4242

43-
## Unreleased — since 2.5.0
43+
## 2.6.0 — since 2.5.0
4444

4545
### A high half-odd power of a quadratic beside a power of another is reduced in exact rationals
4646

‎Sources/AngouriMath/Docs/WhatsNew/version_performance_control.md‎

Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -180,6 +180,106 @@ honest reason -- a compiled delegate over `Complex` has nothing to put on the he
180180

181181
---
182182

183+
## The 1957th and the 2549th, measured together on one machine — the pair for 2.6.0
184+
185+
The pair the release checklist owes: `v2.5.0`
186+
([`ab7a8bd6`](https://github.com/asc-community/AngouriMath/commit/ab7a8bd6b92d9ae99b3e23e51b10dca5c0e8fe11), the 1957th)
187+
re-measured beside
188+
[`001b1caa`](https://github.com/asc-community/AngouriMath/commit/001b1caa694f1dd8476c3a54d93d10d7a7fcfe4d), the
189+
2549th, which is the last change to the kernel before the release. Both columns come from one run of
190+
`Sources/Utils/benchmark_key_commits.sh`, on 2026-10-18, on one machine with nothing else on it. The period is the
191+
whole of 2.6.0, 592 commits.
192+
193+
The `v2.5.0` column agrees with the 1954th column of the 2.5.0 pair, measured on 2026-09-09 three commits earlier.
194+
Every row the gate measures agrees to within 0.02%, and five agree to the byte, `SimplifyEasy` among them.
195+
`CompileEasy` and `CompileHard` differ by 0.30% and 0.19%. The gate leaves those two ungated because their
196+
allocation includes building a delegate.
197+
198+
### Allocation
199+
200+
| benchmark | v2.5.0 | 2549th | change |
201+
|---|--:|--:|--:|
202+
| `CompileEasy` | 10,970 | 11,003 | +0.30% |
203+
| `CompileHard` | 20,434 | 20,434 | 0.00% |
204+
| `Derivate` | 53,239 | 56,190 | **+5.54%** |
205+
| `EvalPolynomialFresh` | 650,888 | 12,536 | **−98.07%** |
206+
| `EvalPolynomialFresh15Digits` | 265,816 | 12,064 | **−95.46%** |
207+
| `EvalTranscendentalFresh` | 5,668,395 | 34,760 | **−99.39%** |
208+
| `EvalTrig` | 1,341,457 | 69,944 | **−94.79%** |
209+
| `EvalTrigPrecise` | 12,742,285 | 336,552 | **−97.36%** |
210+
| `ParseEasy` | 18,261 | 18,421 | +0.88% |
211+
| `ParseHard` | 3,584,817 | 60,103 | **−98.32%** |
212+
| `SimplifyEasy` | 79,282 | 78,978 | −0.38% |
213+
| `SimplifyHard` | 331,710,136 | 176,205,784 | **−46.88%** |
214+
| `SolveEasy` | 8,865,872 | 454,021 | **−94.88%** |
215+
| `SolveEasyMedium` | 65,648 | 66,744 | **+1.67%** |
216+
| `SolveHard` | 11,884,272 | 10,001,832 | **−15.84%** |
217+
| `SolveMedium` | 455,893 | 459,134 | +0.71% |
218+
| `SolveMediumHard` | 1,449,394 | 1,411,524 | −2.61% |
219+
220+
Bytes allocated per call. `EvalEasy`, `RunEasy`, `RunMedium` and `RunHard` allocate nothing in both columns and are
221+
left out.
222+
223+
- **The evaluation rows** are the numerical-evaluation work of the 2050th to the 2077th, recorded below.
224+
- **`ParseHard`** is the 2203rd, the parser predicting in SLL first.
225+
226+
### The steps compose, and that was checked
227+
228+
`SolveEasy` was measured in six steps:
229+
- −29.2% at the 2050th;
230+
- −29.6% and −62.1% at the 2052nd and 2053rd;
231+
- −41.4% and −20.2% at the 2054th to the 2075th;
232+
- −42.1% at the 2077th.
233+
234+
Composed, they predict −94.9%, and the end-to-end measurement is −94.88%.
235+
236+
`SimplifyHard`'s recorded steps predict about −44.5%, and the measurement is −46.88%. The 2.4 points between them
237+
are not attributed to any section of this file.
238+
239+
### `Derivate` went up 5.5%, in steps none of which the gate could see
240+
241+
`Derivate` differentiates a parsed constant, so no parser change reaches it. Its gate baseline moved five times
242+
across the release, each move within the gate's 3%:
243+
244+
| baseline recorded at | allocation | step |
245+
|---|--:|--:|
246+
| `v2.5.0`, re-measured here | 53,239 | |
247+
| 2053rd | 53,111 | −0.2% |
248+
| 2084th | 53,528 | +0.8% |
249+
| 2117th | 54,567 | +1.9% |
250+
| 2130th | 55,095 | +1.0% |
251+
| 2203rd | 55,783 | +1.2% |
252+
| 2549th, measured here | 56,190 | +0.7% |
253+
254+
A baseline is re-recorded by the pull request that moves it, so each step covers every commit since the step before it,
255+
not one change. The largest step, +1,039 bytes, is the 2117th,
256+
[#1426](https://github.com/asc-community/AngouriMath/pull/1426). It gives a sum, a product and the other flat operators
257+
a cached list of their operands, and so makes each of those nodes larger. That is a candidate, not a finding:
258+
**no step is bisected**, so the increase is recorded here as unattributed. This file has one other case of steps each free by the gate summing to a real cost, the
259+
rule-set exchange's +13%. This is the same pattern at a smaller size, and it is why the pair is measured end to end.
260+
261+
`SolveEasyMedium` +1.67%, `ParseEasy` +0.88% and `SolveMedium` +0.71% are below the gate's resolution for a single step
262+
and are not attributed either.
263+
264+
### Timings
265+
266+
These moved well outside this machine's run-to-run spread and agree in sign with the allocation beside them:
267+
268+
| benchmark | change |
269+
|---|--:|
270+
| `EvalTranscendentalFresh` | −99.50% |
271+
| `EvalPolynomialFresh` | −98.81% |
272+
| `EvalTrigPrecise` | −98.20% |
273+
| `ParseHard` | −98.17% |
274+
| `SolveEasy` | −95.81% |
275+
| `EvalTrig` | −95.47% |
276+
| `EvalPolynomialFresh15Digits` | −94.63% |
277+
| `SimplifyHard` | −43.90% |
278+
| `SolveHard` | −37.69% |
279+
280+
`Derivate` was +5.15% (13.7 → 14.5 µs), in line with its allocation. The smaller rows from the same run are not worth
281+
reading and are not quoted.
282+
183283
## The 1845th and the 1954th, measured together on one machine — the pair for 2.5.0
184284

185285
The pair the release checklist owes: `v2.4.0` (`de7189b1`, the 1845th) re-measured beside the

0 commit comments

Comments
 (0)