Borrow canonical FSL chunks during swizzle#8796
Conversation
Signed-off-by: Daniel King <dan@spiraldb.com>
Merging this PR will improve performance by 12.03%
Performance Changes
Tip Curious why this is faster? Comment Comparing Footnotes
|
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: Vortex queriesVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.045x ➖, 0↑ 0↓)
datafusion / parquet (0.998x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.024x ➖, 0↑ 0↓)
duckdb / parquet (1.014x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: PolarSignals ProfilingVortex (geomean): 0.982x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (0.982x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: FineWeb NVMeVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.205x ❌, 0↑ 8↓)
datafusion / vortex-compact (1.020x ➖, 0↑ 0↓)
datafusion / parquet (1.055x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed (1.133x ❌, 0↑ 7↓)
duckdb / vortex-compact (1.018x ➖, 0↑ 0↓)
duckdb / parquet (1.002x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.001x ➖, 0↑ 0↓)
datafusion / vortex-compact (1.005x ➖, 0↑ 0↓)
datafusion / parquet (1.000x ➖, 0↑ 1↓)
datafusion / arrow (1.002x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.985x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.941x ➖, 3↑ 0↓)
duckdb / parquet (0.990x ➖, 2↑ 1↓)
duckdb / duckdb (0.980x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.182x ❌, 0↑ 96↓)
datafusion / vortex-compact (1.154x ❌, 0↑ 87↓)
datafusion / parquet (1.141x ❌, 0↑ 76↓)
duckdb / vortex-file-compressed (1.129x ❌, 1↑ 65↓)
duckdb / vortex-compact (1.005x ➖, 1↑ 2↓)
duckdb / parquet (1.104x ❌, 0↑ 51↓)
duckdb / duckdb (1.001x ➖, 1↑ 1↓)
No file size changes detected. |
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.195x ➖, 0↑ 2↓)
datafusion / vortex-compact (1.126x ➖, 0↑ 1↓)
datafusion / parquet (1.044x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.000x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.039x ➖, 0↑ 0↓)
duckdb / parquet (1.050x ➖, 0↑ 0↓)
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (1.017x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.990x ➖, 0↑ 0↓)
duckdb / parquet (0.995x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench Sorted on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.951x ➖, 1↑ 0↓)
datafusion / parquet (0.970x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.952x ➖, 1↑ 0↓)
duckdb / parquet (1.000x ➖, 0↑ 0↓)
duckdb / duckdb (0.984x ➖, 0↑ 0↓)
File Size Changes (201 files changed, +0.0% overall, 103↑ 98↓)
Totals:
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.038x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.952x ➖, 9↑ 0↓)
datafusion / parquet (1.052x ➖, 0↑ 0↓)
datafusion / arrow (1.070x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed (1.024x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.035x ➖, 0↑ 0↓)
duckdb / parquet (1.011x ➖, 0↑ 0↓)
duckdb / duckdb (1.022x ➖, 0↑ 0↓)
No file size changes detected. |
Benchmarks: Clickbench on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.981x ➖, 1↑ 0↓)
datafusion / parquet (0.940x ➖, 16↑ 1↓)
duckdb / vortex-file-compressed (0.975x ➖, 0↑ 0↓)
duckdb / parquet (0.973x ➖, 0↑ 1↓)
duckdb / duckdb (0.999x ➖, 1↑ 1↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
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.139x ➖, 0↑ 2↓)
datafusion / vortex-compact (1.109x ➖, 0↑ 2↓)
datafusion / parquet (1.121x ➖, 0↑ 4↓)
duckdb / vortex-file-compressed (1.004x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.955x ➖, 0↑ 0↓)
duckdb / parquet (1.055x ➖, 0↑ 0↓)
|
Benchmarks: Random AccessVortex (geomean): 0.945x ➖ How to read Verdict and Engines
unknown / unknown (0.963x ➖, 7↑ 1↓)
|
Benchmarks: Appian on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.991x ➖, 0↑ 0↓)
datafusion / parquet (1.070x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (0.985x ➖, 0↑ 0↓)
duckdb / parquet (0.994x ➖, 0↑ 0↓)
duckdb / duckdb (0.953x ➖, 1↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.991x ➖, 1↑ 1↓)
datafusion / vortex-compact (0.919x ➖, 0↑ 0↓)
datafusion / parquet (1.049x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (0.989x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.956x ➖, 0↑ 0↓)
duckdb / parquet (0.932x ➖, 0↑ 0↓)
|
Benchmarks: CompressionVortex (geomean): 0.996x ➖ How to read Verdict and Engines
unknown / unknown (0.993x ➖, 0↑ 0↓)
|
Summary
execute::<FixedSizeListArray>for chunks that are already canonical FSLWhy
Chunked FSL canonicalization only needs each chunk's elements child. Borrowing the typed canonical view avoids per-chunk owned execute/downcast overhead in this metadata-only swizzle path.
Validation
cargo test -p vortex-array arrays::chunkedcargo bench -p vortex-array --bench chunked_fsl_canonicalize -- canonicalize --sample-count 100 --max-time 3