Repository navigation
Commit 66007af
The benchmark job measured parse, Simplify, Solve and Differentiate on every push to the kernel
and then uploaded the numbers, which meant a regression was visible to whoever went looking and to
nobody else. #746's standing condition is that speed and memory on these paths are measured rather
than hoped for, and a measurement that nothing fails on is not that.
PerformanceGate compares a run against Sources/Tests/DotnetBenchmark/performance-baseline.json and
returns a non-zero exit code. It gates allocation and not the wall clock, because only one of the
two is a property of the code: allocated bytes per operation is what the program asked the
allocator for, and the same input asks for the same number of bytes, while a GitHub-hosted runner's
wall clock is a property of whoever else is on that host.
Measured before choosing the thresholds -- all eighteen benchmarks, three consecutive runs of one
unchanged build, on a machine deliberately left loaded -- allocation was at most 0.033% apart run
to run on the sixteen gated benchmarks and identical to the byte on seven of them, while the mean
time was up to 51.8% apart and 8-10% apart on nine of the eighteen. Three orders of magnitude
between the two is the argument: allocation is held to 3%, a hundred times the observed spread, and
the wall clock fails only above 3x, which is a catastrophe threshold and deliberately catches
nothing smaller.
CompileEasy and CompileHard are excluded by name, at 1.0% and 3.6% over those same three runs,
because what they measure includes the runtime building and JIT-compiling a delegate. The exclusion
lives in the baseline's ungated map with its reason and the gate prints it on every run, so it is a
decision somebody made rather than a benchmark missing from the file.
It fails on an improvement too, as the corpus gate does and for the same reason: a baseline that
overstates what the library allocates would let a later change give the gain back unnoticed. The
verdict says IMPROVED rather than REGRESSED and says to update the baseline.
The run writes its numbers in the baseline's own format, so updating the baseline is one file
copied over another -- including from the artifact of the job that just failed, which is why the
upload step keeps if: always() and why the gate runs before it.
#529
#500
#746
Claude-Session: https://claude.ai/code/session_011emtnRT6EWTrxXNtqDVK3e
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
1 parent ebf8475 commit 66007af
6 files changed
Lines changed: 697 additions & 5 deletions
File tree
- .github/workflows
- Sources
- AngouriMath/Docs/WhatsNew
- Tests/DotnetBenchmark
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
55 | 55 | | |
56 | 56 | | |
57 | 57 | | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
58 | 74 | | |
59 | 75 | | |
60 | 76 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
200 | 200 | | |
201 | 201 | | |
202 | 202 | | |
| 203 | + | |
| 204 | + | |
| 205 | + | |
| 206 | + | |
| 207 | + | |
| 208 | + | |
| 209 | + | |
| 210 | + | |
| 211 | + | |
| 212 | + | |
| 213 | + | |
| 214 | + | |
| 215 | + | |
| 216 | + | |
| 217 | + | |
| 218 | + | |
| 219 | + | |
| 220 | + | |
| 221 | + | |
| 222 | + | |
203 | 223 | | |
204 | 224 | | |
205 | 225 | | |
| |||
400 | 420 | | |
401 | 421 | | |
402 | 422 | | |
403 | | - | |
| 423 | + | |
404 | 424 | | |
405 | 425 | | |
406 | 426 | | |
| |||
434 | 454 | | |
435 | 455 | | |
436 | 456 | | |
437 | | - | |
| 457 | + | |
| 458 | + | |
438 | 459 | | |
439 | 460 | | |
440 | 461 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
47 | 47 | | |
48 | 48 | | |
49 | 49 | | |
| 50 | + | |
| 51 | + | |
| 52 | + | |
| 53 | + | |
| 54 | + | |
| 55 | + | |
| 56 | + | |
| 57 | + | |
| 58 | + | |
| 59 | + | |
| 60 | + | |
| 61 | + | |
| 62 | + | |
| 63 | + | |
| 64 | + | |
| 65 | + | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
| 70 | + | |
| 71 | + | |
| 72 | + | |
| 73 | + | |
| 74 | + | |
| 75 | + | |
| 76 | + | |
| 77 | + | |
| 78 | + | |
| 79 | + | |
| 80 | + | |
| 81 | + | |
| 82 | + | |
| 83 | + | |
| 84 | + | |
| 85 | + | |
| 86 | + | |
| 87 | + | |
| 88 | + | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
| 97 | + | |
| 98 | + | |
| 99 | + | |
| 100 | + | |
| 101 | + | |
| 102 | + | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
50 | 126 | | |
51 | 127 | | |
52 | 128 | | |
| |||
0 commit comments