perf: remove unneeded scalar_at and valid_at and use arrays instead#8307
Conversation
Merging this PR will improve performance by 20.92%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | decompress_rd[f64, (100000, 0.0)] |
845.9 µs | 1,024.1 µs | -17.4% |
| ❌ | Simulation | decompress_rd[f32, (100000, 0.0)] |
499.5 µs | 586.5 µs | -14.85% |
| ⚡ | Simulation | extend_from_array_non_zctl_overlapping[(10000, 8)] |
4 ms | 2.3 ms | +70.67% |
| ⚡ | Simulation | extend_from_array_non_zctl_overlapping[(1000, 8)] |
452.9 µs | 287 µs | +57.79% |
| ⚡ | Simulation | chunked_bool_canonical_into[(1000, 10)] |
46.7 µs | 31.7 µs | +47.23% |
| ⚡ | Simulation | varbinview_zip_block_mask |
3.7 ms | 2.9 ms | +27.49% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[128] |
275.3 ns | 216.9 ns | +26.89% |
| ⚡ | Simulation | chunked_varbinview_canonical_into[(1000, 10)] |
197.9 µs | 161.9 µs | +22.26% |
| ⚡ | Simulation | extend_from_array_non_zctl_overlapping[(1000, 32)] |
948.6 µs | 782.4 µs | +21.24% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[1024] |
336.9 ns | 278.6 ns | +20.94% |
| ⚡ | Simulation | chunked_varbinview_into_canonical[(1000, 10)] |
213.6 µs | 177.3 µs | +20.48% |
| ⚡ | Simulation | bitwise_not_vortex_buffer_mut[2048] |
400.6 ns | 342.2 ns | +17.05% |
| ⚡ | Simulation | decompress_rd[f64, (100000, 0.01)] |
981.6 µs | 845.5 µs | +16.11% |
| ⚡ | Simulation | decompress_rd[f64, (100000, 0.1)] |
981.6 µs | 845.4 µs | +16.1% |
| ⚡ | Simulation | varbinview_zip_fragmented_mask |
6.9 ms | 6.2 ms | +12.4% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/row-accessor-remove (6626533) with develop (f2148d4)
e5bbca4 to
b555fd5
Compare
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
b555fd5 to
6626533
Compare
🚨🚨🚨❌❌❌ SQL BENCHMARK FAILED ❌❌❌🚨🚨🚨Benchmark |
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 1.037x ➖ How to read Verdict and Engines
datafusion / vortex-file-compressed (1.037x ➖, 1↑ 3↓)
No file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.013x ➖, 1↑ 1↓)
datafusion / vortex-compact (1.032x ➖, 1↑ 3↓)
datafusion / parquet (1.039x ➖, 0↑ 3↓)
datafusion / arrow (0.981x ➖, 4↑ 4↓)
duckdb / vortex-file-compressed (1.030x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.006x ➖, 0↑ 0↓)
duckdb / parquet (1.031x ➖, 1↑ 4↓)
duckdb / duckdb (1.002x ➖, 0↑ 0↓)
File Size Changes (10 files changed, -0.1% overall, 4↑ 6↓)
Totals:
|
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.972x ➖, 11↑ 5↓)
datafusion / vortex-compact (0.974x ➖, 7↑ 4↓)
datafusion / parquet (0.972x ➖, 8↑ 7↓)
duckdb / vortex-file-compressed (1.003x ➖, 3↑ 2↓)
duckdb / vortex-compact (0.998x ➖, 1↑ 0↓)
duckdb / parquet (0.998x ➖, 1↑ 0↓)
duckdb / duckdb (0.990x ➖, 2↑ 0↓)
File Size Changes (5 files changed, +0.0% overall, 1↑ 4↓)
Totals:
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) How to read Verdict and Engines
duckdb / vortex-file-compressed (0.998x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.007x ➖, 0↑ 0↓)
duckdb / parquet (1.015x ➖, 0↑ 0↓)
File Size Changes (1 files changed, -0.0% overall, 0↑ 1↓)
Totals:
|
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.502x ❌, 0↑ 6↓)
datafusion / vortex-compact (1.488x ❌, 0↑ 5↓)
datafusion / parquet (1.525x ❌, 0↑ 7↓)
duckdb / vortex-file-compressed (1.148x ➖, 0↑ 1↓)
duckdb / vortex-compact (1.110x ➖, 0↑ 0↓)
duckdb / parquet (1.229x ➖, 0↑ 2↓)
|
Benchmarks: Random AccessVortex (geomean): 0.937x ➖ How to read Verdict and Engines
unknown / unknown (1.010x ➖, 10↑ 5↓)
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.943x ➖, 2↑ 0↓)
datafusion / vortex-compact (0.978x ➖, 3↑ 1↓)
datafusion / parquet (0.987x ➖, 1↑ 1↓)
datafusion / arrow (0.959x ➖, 8↑ 7↓)
duckdb / vortex-file-compressed (1.002x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.005x ➖, 0↑ 0↓)
duckdb / parquet (0.998x ➖, 0↑ 0↓)
duckdb / duckdb (1.001x ➖, 0↑ 0↓)
File Size Changes (27 files changed, +0.0% overall, 16↑ 11↓)
Totals:
|
Benchmarks: Clickbench on NVMEVerdict: No clear signal (environment too noisy confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (0.839x ✅, 20↑ 0↓)
datafusion / parquet (0.807x ✅, 21↑ 0↓)
duckdb / vortex-file-compressed (1.028x ➖, 1↑ 7↓)
duckdb / parquet (1.007x ➖, 1↑ 2↓)
duckdb / duckdb (1.010x ➖, 1↑ 1↓)
File Size Changes (106 files changed, +0.0% overall, 56↑ 50↓)
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.484x ❌, 0↑ 15↓)
datafusion / vortex-compact (1.481x ❌, 0↑ 16↓)
datafusion / parquet (1.577x ❌, 0↑ 17↓)
duckdb / vortex-file-compressed (1.153x ➖, 0↑ 3↓)
duckdb / vortex-compact (1.188x ➖, 0↑ 7↓)
duckdb / parquet (1.225x ➖, 0↑ 7↓)
|
Benchmarks: Appian on NVMEVerdict: No clear signal (low confidence) How to read Verdict and Engines
datafusion / vortex-file-compressed (1.056x ➖, 0↑ 0↓)
datafusion / parquet (0.994x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (1.017x ➖, 0↑ 0↓)
duckdb / parquet (1.022x ➖, 0↑ 0↓)
duckdb / duckdb (1.029x ➖, 0↑ 0↓)
File Size Changes (4 files changed, -0.0% overall, 1↑ 3↓)
Totals:
|
Benchmarks: CompressionVortex (geomean): 1.007x ➖ How to read Verdict and Engines
unknown / unknown (0.985x ➖, 4↑ 3↓)
|
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.965x ➖, 0↑ 1↓)
datafusion / vortex-compact (0.973x ➖, 0↑ 1↓)
datafusion / parquet (0.917x ➖, 4↑ 0↓)
duckdb / vortex-file-compressed (0.963x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.964x ➖, 0↑ 0↓)
duckdb / parquet (0.903x ➖, 1↑ 0↓)
|
We often pull out and decompress array when doing
is_validin a loop, this PR instead usesexecute_maskonce and then operates on aMaskin the loop.We could later come along and replace this
Mask::value(&self)method with a packed chunk iterator.