[DO NOT MERGE] Experimental RowFn - #9255
Conversation
Merging this PR will regress 6 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | compact_sliced[(16384, 10)] |
1.4 ms | 1.9 ms | -26.48% |
| ❌ | Simulation | compact_sliced[(4096, 10)] |
385.6 µs | 513.9 µs | -24.97% |
| ❌ | Simulation | slice_dict_tight_loop[10000] |
701.7 µs | 844.2 µs | -16.88% |
| ❌ | Simulation | cold_misaligned[(64, 256)] |
4.4 ms | 5.1 ms | -15.01% |
| ❌ | Simulation | mul_u8_nonnull |
166 µs | 190.8 µs | -13.01% |
| ❌ | Simulation | compress_fsst[(1000, 64, 8)] |
1 ms | 1.1 ms | -10.51% |
| ⚡ | Simulation | column_x_constant[2] |
995.5 µs | 199 µs | ×5 |
| ⚡ | Simulation | column_x_constant[32] |
825.2 µs | 180.8 µs | ×4.6 |
| ⚡ | Simulation | column_x_column[2] |
409.3 µs | 151.9 µs | ×2.7 |
| ⚡ | Simulation | column_x_constant[256] |
1,087.4 µs | 473.9 µs | ×2.3 |
| ⚡ | Simulation | column_x_extension_constant[2] |
415.2 µs | 219.4 µs | +89.25% |
| ⚡ | Simulation | nullable[2] |
660.9 µs | 382.2 µs | +72.9% |
| ⚡ | Simulation | non_nullable[2] |
665 µs | 387.1 µs | +71.78% |
| ⚡ | Simulation | column_x_column[32] |
163.9 µs | 107.7 µs | +52.15% |
| ⚡ | Simulation | nullable[2] |
706.5 µs | 480.4 µs | +47.05% |
| ⚡ | Simulation | non_nullable[2] |
710.6 µs | 485.9 µs | +46.24% |
| ⚡ | Simulation | column_x_column[256] |
147.8 µs | 104.9 µs | +40.96% |
| ⚡ | Simulation | column_x_extension_constant[256] |
690.4 µs | 501.3 µs | +37.74% |
| ⚡ | Simulation | take_filter_list_random_mask_sequential_indices[768, 50] |
236.8 µs | 173.2 µs | +36.71% |
| ⚡ | Simulation | take_filter_list_slice_mask_random_indices[768, 50] |
240.9 µs | 177.4 µs | +35.8% |
| ... | ... | ... | ... | ... | ... |
ℹ️ 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 (065a727) with develop (66d096b)
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. ↩
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>
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>
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>
EXPERIMENTAL
(for benchmarking purposes)
See #9128