[DO NOT MERGE] Experimental RowFn - #9255
Conversation
Merging this PR will regress 43 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | case_when_nary_10_conditions[1000] |
422.9 µs | 600.8 µs | -29.62% |
| ❌ | Simulation | compact_sliced[(16384, 10)] |
1.4 ms | 1.9 ms | -26.5% |
| ❌ | Simulation | compact_sliced[(4096, 10)] |
385.6 µs | 514.4 µs | -25.04% |
| ❌ | Simulation | case_when_nary_equality_lookup[1000] |
321.8 µs | 420 µs | -23.38% |
| ❌ | Simulation | baseline_lt[4, 1024] |
100 µs | 129.8 µs | -22.93% |
| ❌ | Simulation | eq_i64_constant |
372.9 µs | 479.4 µs | -22.23% |
| ❌ | Simulation | case_when_nary_10_conditions[10000] |
768.2 µs | 986 µs | -22.09% |
| ❌ | Simulation | baseline_eq[4, 1024] |
98.9 µs | 125.7 µs | -21.31% |
| ❌ | Simulation | baseline_eq[16, 1024] |
100.1 µs | 126.8 µs | -21.09% |
| ❌ | Simulation | case_when_nary_early_dominant[1000] |
232.3 µs | 293.3 µs | -20.79% |
| ❌ | Simulation | case_when_nary_3_conditions[1000] |
234.8 µs | 295.6 µs | -20.56% |
| ❌ | Simulation | baseline_lt[16, 1024] |
101.5 µs | 127 µs | -20.07% |
| ❌ | Simulation | bench_compare_sliced_dict_primitive[(1000, 10000)] |
129.7 µs | 161.3 µs | -19.61% |
| ❌ | Simulation | case_when_all_false[1000] |
123.1 µs | 151.6 µs | -18.84% |
| ❌ | Simulation | bench_compare_sliced_dict_primitive[(2000, 10000)] |
143.3 µs | 176.1 µs | -18.6% |
| ❌ | Simulation | case_when_nary_equality_lookup[10000] |
528 µs | 646.7 µs | -18.34% |
| ❌ | Simulation | bench_compare_sliced_dict_primitive[(2500, 10000)] |
151.3 µs | 184.6 µs | -18.02% |
| ❌ | Simulation | case_when_all_true[1000] |
129.1 µs | 156.3 µs | -17.39% |
| ❌ | Simulation | bench_compare_sliced_dict_primitive[(3333, 10000)] |
164.2 µs | 198.3 µs | -17.2% |
| ❌ | Simulation | bench_compare_primitive[(10000, 32)] |
181.6 µs | 216.5 µs | -16.11% |
| ... | ... | ... | ... | ... | ... |
ℹ️ 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 (833632a) with develop (4e7d718)2
Footnotes
-
85 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
develop(17b190b) during the generation of this report, so 4e7d718 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (0.994x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.992x ➖, 1↑ 0↓)
duckdb / vortex-compact / ns (0.977x ➖, 7↑ 3↓)
duckdb / parquet / ns (1.009x ➖, 0↑ 0↓)
File Size Changes (101 files changed, -60.8% overall, 0↑ 101↓)
Totals:
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.256x ➖, 0↑ 4↓)
datafusion / parquet / ns (1.141x ➖, 0↑ 2↓)
duckdb / vortex-compact / ns (1.015x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.999x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.003x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.024x ➖, 1↑ 1↓)
duckdb / vortex-compact / ns (1.037x ➖, 1↑ 3↓)
duckdb / parquet / ns (1.009x ➖, 0↑ 0↓)
File Size Changes (201 files changed, -57.2% overall, 53↑ 148↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.060x ➖, 0↑ 1↓)
datafusion / parquet / ns (0.940x ➖, 1↑ 0↓)
duckdb / vortex-compact / ns (1.118x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.044x ➖, 0↑ 0↓)
|
Benchmarks: Appian on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.005x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.993x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.007x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.001x ➖, 0↑ 0↓)
File Size Changes (10 files changed, -63.8% overall, 0↑ 10↓)
Totals:
|
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (0.994x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.001x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (0.993x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.006x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -53.7% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.000x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.992x ➖, 2↑ 2↓)
duckdb / vortex-compact / ns (0.983x ➖, 1↑ 0↓)
duckdb / parquet / ns (1.000x ➖, 0↑ 0↓)
File Size Changes (9 files changed, -56.1% overall, 0↑ 9↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.004x ➖, 0↑ 2↓)
datafusion / parquet / ns (1.002x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed / ns (1.014x ➖, 6↑ 10↓)
duckdb / parquet / ns (1.005x ➖, 2↑ 8↓)
File Size Changes (25 files changed, -43.5% overall, 0↑ 25↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.006x ➖, 1↑ 1↓)
datafusion / parquet / ns (1.000x ➖, 1↑ 2↓)
duckdb / vortex-compact / ns (1.007x ➖, 0↑ 6↓)
duckdb / parquet / ns (1.010x ➖, 4↑ 8↓)
File Size Changes (25 files changed, -56.5% overall, 0↑ 25↓)
Totals:
|
Benchmarks: FineWeb S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.077x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.103x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.113x ➖, 0↑ 1↓)
duckdb / parquet / ns (0.776x ➖, 1↑ 0↓)
|
Benchmarks: PolarSignals Profiling 📖Vortex (geomean): 1.009x ➖ datafusion / vortex-file-compressed / ns (1.009x ➖, 0↑ 1↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.011x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.994x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (1.007x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.003x ➖, 0↑ 0↓)
File Size Changes (9 files changed, -43.9% overall, 0↑ 9↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.990x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.965x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed / ns (1.018x ➖, 0↑ 1↓)
duckdb / parquet / ns (1.029x ➖, 0↑ 0↓)
|
Benchmarks: FineWeb NVMe 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.996x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.995x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (1.015x ➖, 2↑ 1↓)
duckdb / parquet / ns (1.008x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -46.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed / ns (1.026x ➖, 2↑ 4↓)
duckdb / parquet / ns (1.007x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -32.3% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.984x ➖, 0↑ 0↓)
datafusion / parquet / ns (1.001x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed / ns (0.990x ➖, 0↑ 0↓)
duckdb / parquet / ns (1.001x ➖, 0↑ 1↓)
File Size Changes (9 files changed, -44.0% overall, 0↑ 9↓)
Totals:
|
Benchmarks: Clickbench on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (0.999x ➖, 1↑ 2↓)
datafusion / parquet / ns (1.008x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed / ns (1.021x ➖, 1↑ 7↓)
duckdb / parquet / ns (0.997x ➖, 0↑ 1↓)
File Size Changes (101 files changed, -39.2% overall, 0↑ 101↓)
Totals:
|
Benchmarks: Statistical and Population Genetics 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-compact / ns (1.040x ➖, 1↑ 3↓)
duckdb / parquet / ns (0.994x ➖, 0↑ 0↓)
File Size Changes (2 files changed, -67.7% overall, 0↑ 2↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (0.930x ➖, 1↑ 0↓)
datafusion / parquet / ns (0.894x ➖, 3↑ 1↓)
duckdb / vortex-compact / ns (1.008x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.917x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVME 📖Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed / ns (1.002x ➖, 1↑ 1↓)
datafusion / parquet / ns (1.025x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed / ns (1.025x ➖, 0↑ 1↓)
duckdb / parquet / ns (0.990x ➖, 0↑ 0↓)
File Size Changes (201 files changed, -42.8% overall, 50↑ 151↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVME 📖Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-compact / ns (1.007x ➖, 0↑ 0↓)
datafusion / parquet / ns (0.989x ➖, 0↑ 0↓)
duckdb / vortex-compact / ns (1.007x ➖, 0↑ 0↓)
duckdb / parquet / ns (0.993x ➖, 1↑ 0↓)
File Size Changes (9 files changed, -56.0% overall, 0↑ 9↓)
Totals:
|
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Decode list offsets once and subtract the first offset in a typed loop. This removes the measured RowFn batch planning and decoding costs from small list conversions. Record the focused CodSpeed bisection and component counters. Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Reuse the registered Binary function ID for its internal numeric RowFn helper. Record the focused CodSpeed cause and the validated offsets result. Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Dense RowFn execution owns input validity and restores it on the output. Decode a masked tensor from its child values so nullable tensor operations do not rebuild extension storage under the same mask. Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Record the post-fix CodSpeed counters for take/filter, numeric ID initialization, and nullable tensor decoding. Document the remaining allocator-sensitive u8 multiplication result and floating-point reduction codegen. Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
`list_view_from_list` executed the lazy offsets that `reset_offsets` produces once inside `build_sizes_from_offsets`, dropped that result, and then sliced the still-lazy handle into the view, so the subtraction kernel ran again when a consumer canonicalized the offsets child. Execute the offsets to a `PrimitiveArray` once at the top, compute sizes from it, and slice it zero-copy for the view. Extracted from investigating #9255, where the CodSpeed report showed ~35% improvements on the `take_filter_list` benchmarks. This plumbing fix alone recovers about half of that locally (12.6µs -> 10.1µs median on `take_filter_list_random_mask_sequential_indices[768, 50]`); the remainder is the cost of building and executing the lazy subtraction node itself. Signed-off-by: "Connor Tsui" <connor@spiraldb.com> Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BnDprx2HVVYzEU6mNAAhNC
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
`list_view_from_list` executed the lazy offsets that `reset_offsets` produces inside `build_sizes_from_offsets`, dropped that result, and then sliced the still-lazy handle into the view, so the subtraction kernel ran again when a consumer canonicalized the offsets child. Execute the offsets to a `PrimitiveArray` once, compute sizes from it, and slice it zero-copy for the view. `build_sizes_from_offsets` now takes those offsets and derives the row count from them, so the two can no longer disagree. Extracted from investigating #9255, where the CodSpeed report showed ~35% improvements on the `take_filter_list` benchmarks. This recovers about half of that locally (12.6µs -> 10.1µs median on `take_filter_list_random_mask_sequential_indices[768, 50]`); the remainder is the cost of building and executing the lazy subtraction node itself. Signed-off-by: "Connor Tsui" <connor@spiraldb.com> Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BnDprx2HVVYzEU6mNAAhNC
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: "Connor Tsui" <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Cover lane widths, equality, nullability, and both constant operand positions before routing primitive comparisons through RowFn. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Use RowFn for primitive comparisons while retaining fused x86 bit-packing for the measured wide ordered cases where LLVM generates faster code. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Record the local wall-time matrix, the wide ordered fallback, and the linked-layout sensitivity without treating the results as CodSpeed simulation evidence. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Use the valid seven-character tensor-port revision because Typos parses the longer hash suffix as a misspelled word. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
75147aa to
443aed0
Compare
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
EXPERIMENTAL
(for benchmarking purposes)
See #9128