Accelerate fixed-size-list take for primitive children#8671
Conversation
Copy selected fixed-size-list rows as contiguous primitive ranges when the child elements are already canonical primitive values, avoiding expanded per-element child take indices. Encoded and non-primitive children continue through the existing child take path instead of being forced to decompress.\n\nExpand take_fsl coverage across list byte widths and add forced strategy comparisons, plus nullable and non-nullable range-path correctness tests.\n\nSigned-off-by: "Daniel King" <dan@spiraldb.com>
Merging this PR will improve performance by 12.77%
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: PolarSignals ProfilingVortex (geomean): 0.985x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (0.985x ➖, 1↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.014x ➖, 0↑ 1↓)
datafusion / vortex-compact (0.916x ➖, 2↑ 0↓)
datafusion / parquet (0.991x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.014x ➖, 0↑ 1↓)
duckdb / vortex-compact (1.012x ➖, 1↑ 0↓)
duckdb / parquet (0.964x ➖, 2↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.953x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.951x ➖, 0↑ 0↓)
datafusion / parquet (0.977x ➖, 1↑ 1↓)
datafusion / arrow (0.906x ➖, 10↑ 0↓)
duckdb / vortex-file-compressed (0.977x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.973x ➖, 0↑ 0↓)
duckdb / parquet (0.956x ➖, 2↑ 1↓)
duckdb / duckdb (0.971x ➖, 0↑ 0↓)
File Size Changes (9 files changed, -0.1% overall, 4↑ 5↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.937x ➖, 11↑ 0↓)
datafusion / vortex-compact (0.961x ➖, 4↑ 1↓)
datafusion / parquet (0.939x ➖, 17↑ 0↓)
duckdb / vortex-file-compressed (0.947x ➖, 11↑ 0↓)
duckdb / vortex-compact (0.958x ➖, 8↑ 0↓)
duckdb / parquet (0.976x ➖, 2↑ 1↓)
duckdb / duckdb (0.964x ➖, 1↑ 1↓)
File Size Changes (6 files changed, +0.0% overall, 4↑ 2↓)
Totals:
|
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
Benchmarks: FineWeb S3Verdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.969x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.004x ➖, 0↑ 1↓)
datafusion / parquet (0.977x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.000x ➖, 0↑ 1↓)
duckdb / vortex-compact (0.892x ➖, 0↑ 0↓)
duckdb / parquet (0.974x ➖, 0↑ 0↓)
|
Benchmarks: Clickbench Sorted on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.044x ➖, 1↑ 3↓)
datafusion / parquet (1.046x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.053x ➖, 1↑ 2↓)
duckdb / parquet (1.012x ➖, 0↑ 0↓)
duckdb / duckdb (1.008x ➖, 0↑ 0↓)
File Size Changes (201 files changed, +0.0% overall, 114↑ 87↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.948x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.956x ➖, 0↑ 0↓)
datafusion / parquet (0.952x ➖, 0↑ 0↓)
datafusion / arrow (0.915x ➖, 6↑ 0↓)
duckdb / vortex-file-compressed (0.960x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.966x ➖, 0↑ 0↓)
duckdb / parquet (0.987x ➖, 0↑ 1↓)
duckdb / duckdb (0.973x ➖, 0↑ 0↓)
File Size Changes (27 files changed, -0.0% overall, 11↑ 16↓)
Totals:
|
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.941x ➖, 3↑ 0↓)
datafusion / parquet (0.962x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed (0.952x ➖, 4↑ 1↓)
duckdb / parquet (0.978x ➖, 0↑ 0↓)
duckdb / duckdb (0.985x ➖, 0↑ 0↓)
File Size Changes (105 files changed, +0.0% overall, 43↑ 62↓)
Totals:
|
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.025x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.859x ➖, 5↑ 2↓)
datafusion / parquet (0.925x ➖, 3↑ 1↓)
duckdb / vortex-file-compressed (1.039x ➖, 0↑ 1↓)
duckdb / vortex-compact (1.047x ➖, 0↑ 0↓)
duckdb / parquet (0.970x ➖, 0↑ 0↓)
|
Benchmarks: Appian on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.913x ➖, 3↑ 0↓)
datafusion / parquet (0.930x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (0.919x ➖, 2↑ 0↓)
duckdb / parquet (0.917x ➖, 1↑ 0↓)
duckdb / duckdb (0.927x ➖, 0↑ 0↓)
File Size Changes (4 files changed, -0.0% overall, 2↑ 2↓)
Totals:
|
Benchmarks: Random AccessVortex (geomean): 1.045x ➖ How to read Verdict and Engines
unknown / unknown (0.986x ➖, 1↑ 1↓)
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.080x ➖, 0↑ 3↓)
datafusion / vortex-compact (1.084x ➖, 0↑ 2↓)
datafusion / parquet (1.032x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (1.225x ➖, 0↑ 4↓)
duckdb / vortex-compact (1.240x ➖, 0↑ 6↓)
duckdb / parquet (1.127x ➖, 0↑ 1↓)
|
Benchmarks: CompressionVortex (geomean): 1.002x ➖ How to read Verdict and Engines
unknown / unknown (1.019x ➖, 0↑ 11↓)
|
Summary
takepath so this does not force decompressiontake_fslbenchmark coverage across list byte widths and add forced strategy comparisonsTesting
cargo +nightly fmt --allcargo check -p vortex-array --bench take_fslcargo test -p vortex-array fixed_size_list::tests::takecargo clippy --all-targets --all-featuresgit diff --check