[DO NOT MERGE] Experimental RowFn - #9255
Conversation
Merging this PR will regress 4 benchmarks
Warning Please fix the performance issues or acknowledge them on CodSpeed. Performance Changes
Tip Investigate this regression by commenting Comparing Footnotes
|
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>
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>
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>
EXPERIMENTAL
(for benchmarking purposes)
See #9128