Automate RowFn benchmark comparisons - #9351
Conversation
Merging this PR will regress 1 benchmark
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | words_gather_scalar[65536] |
8.3 µs | 9.4 µs | -11.85% |
| ⚡ | Simulation | or_chain[1024] |
2.4 ms | 1.5 ms | +61.83% |
| ⚡ | Simulation | or_chain[16] |
2.3 ms | 1.4 ms | +60.63% |
| ⚡ | Simulation | add_i64_nullable |
320.4 µs | 199.5 µs | +60.6% |
| ⚡ | Simulation | mul_i32_nullable |
233.3 µs | 148.4 µs | +57.24% |
| ⚡ | Simulation | mul_u8_nonnull |
102.2 µs | 65.1 µs | +57.04% |
| ⚡ | Simulation | case_when_nary_10_conditions[1000] |
606.6 µs | 393.5 µs | +54.14% |
| ⚡ | Simulation | int_gt[16] |
157.6 µs | 111.5 µs | +41.31% |
| ⚡ | Simulation | int_gt[1024] |
164.9 µs | 118.4 µs | +39.34% |
| ⚡ | Simulation | case_when_nary_equality_lookup[1000] |
424.1 µs | 306 µs | +38.58% |
| ⚡ | Simulation | mul_i32_constant |
130 µs | 94.9 µs | +36.91% |
| ⚡ | Simulation | or_chain[8192] |
3.7 ms | 2.7 ms | +36.8% |
| ⚡ | Simulation | baseline_lt[4, 1024] |
131.2 µs | 97.5 µs | +34.51% |
| ⚡ | Simulation | case_when_nary_10_conditions[10000] |
984.4 µs | 734.5 µs | +34.01% |
| ⚡ | Simulation | int_gt[8192] |
225.6 µs | 169.5 µs | +33.1% |
| ⚡ | Simulation | case_when_nary_early_dominant[1000] |
295.5 µs | 224.5 µs | +31.64% |
| ⚡ | Simulation | baseline_eq[4, 1024] |
127.4 µs | 96.9 µs | +31.52% |
| ⚡ | Simulation | case_when_nary_3_conditions[1000] |
297.5 µs | 227.1 µs | +30.98% |
| ⚡ | Simulation | baseline_lt[16, 1024] |
128.7 µs | 98.7 µs | +30.41% |
| ⚡ | Simulation | baseline_eq[16, 1024] |
128.6 µs | 98.8 µs | +30.09% |
| ... | ... | ... | ... | ... | ... |
ℹ️ Only the first 20 benchmarks are displayed. Go to the app to view all benchmarks.
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ct/row-fn-benchmark-tools (d9c3394) with ct/row-fn-tensor-products (c1382ba)2
Footnotes
-
478 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
-
No successful run was found on
ct/row-fn-tensor-products(7152a1c) during the generation of this report, so 597702a was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
127d69d to
7503a08
Compare
6a11034 to
eac0f22
Compare
eac0f22 to
1f8a2ae
Compare
|
Here are the local results that exercise the benchmark runner and its unchanged control suites. The full-stack comparison used a The full comparison used two warm runs and seven alternating measured pairs. Each process used 100 samples with a 0.25–0.5 second measurement window on CPU 4. Negative changes are faster. The change is the median paired ratio, not the ratio of the two displayed medians. This PR does not change these production paths. The control binaries still show layout-sensitive movement, including 14.72–17.21% regressions for list take/filter and a 15.66% improvement for per-row RowFn executor cleanup comparison: 8 casesThis focused screen compared the pre-cleanup and post-cleanup framework with three measured pairs.
Strict-validity cleanup comparison: 8 casesThese promoted cases used seven alternating measured pairs.
Like controls: 7 cases
Take/filter controls: 17 cases
VarBinView compaction controls: 8 cases
|
fde4b39 to
47b2079
Compare
47b2079 to
476afb4
Compare
476afb4 to
c297d4a
Compare
65a604a to
a7940f3
Compare
a7940f3 to
a21e22e
Compare
a21e22e to
5288f14
Compare
5e469fc to
d704653
Compare
09c97e6 to
d5e1a19
Compare
d5e1a19 to
7c76189
Compare
7c76189 to
c63d78a
Compare
c63d78a to
28d6144
Compare
28d6144 to
020bbe9
Compare
020bbe9 to
899c0d8
Compare
899c0d8 to
450807f
Compare
450807f to
c76f226
Compare
c76f226 to
2b837e5
Compare
2b837e5 to
219b67a
Compare
219b67a to
0eb4a5c
Compare
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Rationale for this change
Makes RowFn performance comparisons repeatable across revisions. The runner records enough build and machine state to reject stale benchmark artifacts.
What changes are included in this PR?
Adds separate build and measurement phases, reusable revision-specific target directories, package-grouped parallel builds, alternating process order, machine records, and paired median summaries. The primary profile uses one codegen unit, fat LTO,
target-cpu=native, two warm runs, and seven measured pairs.Focused executor benchmarks and script tests cover framework overhead, strict validity, result parsing, changing inventories, and ratio aggregation. Reused artifacts are validated against the revision, dirty-state digest, Rust and Cargo versions, build configuration, suite inventory, and executable hash.
What APIs are changed? Are there any user-facing changes?
There are no public Rust API changes. This PR adds the developer-facing
scripts/benchmark-rowfn.shcommand and its result format.