Implement compare/between for bitpacked arrays - improve performance by up to 2X#7279
Implement compare/between for bitpacked arrays - improve performance by up to 2X#7279AdamGS wants to merge 14 commits into
Conversation
Merging this PR will improve performance by 62.79%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbinview_opt_canonical_into[(1000, 10)] |
187.5 µs | 224.9 µs | -16.66% |
| ⚡ | Simulation | new_alp_prim_test_between[f64, 2048] |
70.6 µs | 55.1 µs | +28.16% |
| ⚡ | Simulation | new_alp_prim_test_between[f64, 32768] |
250.4 µs | 117.9 µs | ×2.1 |
| ⚡ | Simulation | new_bp_prim_test_between[i16, 16384] |
82.2 µs | 65 µs | +26.35% |
| ⚡ | Simulation | new_bp_prim_test_between[i16, 32768] |
120.3 µs | 93.2 µs | +29.02% |
| ⚡ | Simulation | new_bp_prim_test_between[i32, 2048] |
53.4 µs | 43.5 µs | +22.93% |
| ⚡ | Simulation | new_alp_prim_test_between[f32, 2048] |
62.1 µs | 51.5 µs | +20.54% |
| ⚡ | Simulation | new_bp_prim_test_between[i16, 2048] |
48.8 µs | 40.3 µs | +21.24% |
| ⚡ | Simulation | new_bp_prim_test_between[i32, 32768] |
155.9 µs | 98.7 µs | +58.06% |
| ⚡ | Simulation | new_alp_prim_test_between[f32, 32768] |
153.3 µs | 112 µs | +36.87% |
| ⚡ | Simulation | baseline_eq[4, 65536] |
237.9 µs | 179.9 µs | +32.21% |
| ⚡ | Simulation | fast_eq_out_of_range[4, 65536] |
246 µs | 85.4 µs | ×2.9 |
| ⚡ | Simulation | baseline_lt[4, 65536] |
251.9 µs | 200.7 µs | +25.52% |
| ⚡ | Simulation | baseline_eq[16, 65536] |
259.4 µs | 202.3 µs | +28.2% |
| ⚡ | Simulation | new_bp_prim_test_between[i32, 16384] |
101.2 µs | 69.5 µs | +45.55% |
| ⚡ | Simulation | new_alp_prim_test_between[f32, 16384] |
103.9 µs | 79.6 µs | +30.56% |
| ⚡ | Simulation | new_alp_prim_test_between[f64, 16384] |
146.9 µs | 84.8 µs | +73.13% |
| ⚡ | Simulation | fast_lt_out_of_range[16, 1024] |
67.9 µs | 25.1 µs | ×2.7 |
| ⚡ | Simulation | fast_lt_out_of_range[16, 65536] |
306.3 µs | 144.9 µs | ×2.1 |
| ⚡ | Simulation | fast_lt_out_of_range[4, 1024] |
87.5 µs | 31.1 µs | ×2.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 adamg/bitpack-compare (7a3b856) with develop (2fa51e2)
74732ef to
8cddde0
Compare
Polar Signals Profiling ResultsLatest Run
Previous Runs (10)
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 0.970x ➖ datafusion / vortex-file-compressed (0.970x ➖, 0↑ 0↓)
|
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.989x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.998x ➖, 0↑ 0↓)
datafusion / parquet (0.991x ➖, 1↑ 0↓)
datafusion / arrow (0.992x ➖, 0↑ 1↓)
duckdb / vortex-file-compressed (1.125x ❌, 0↑ 17↓)
duckdb / vortex-compact (1.092x ➖, 0↑ 11↓)
duckdb / parquet (1.044x ➖, 0↑ 1↓)
duckdb / duckdb (1.089x ➖, 0↑ 9↓)
Full attributed analysis
|
Benchmarks: FineWeb NVMeVerdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (0.951x ➖, 1↑ 0↓)
datafusion / vortex-compact (0.971x ➖, 1↑ 0↓)
datafusion / parquet (0.928x ➖, 2↑ 0↓)
duckdb / vortex-file-compressed (0.986x ➖, 1↑ 1↓)
duckdb / vortex-compact (1.001x ➖, 0↑ 1↓)
duckdb / parquet (0.943x ➖, 2↑ 0↓)
Full attributed analysis
|
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.022x ➖, 0↑ 2↓)
datafusion / vortex-compact (1.016x ➖, 1↑ 2↓)
datafusion / parquet (1.016x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed (1.014x ➖, 2↑ 7↓)
duckdb / vortex-compact (1.018x ➖, 1↑ 3↓)
duckdb / parquet (1.011x ➖, 0↑ 2↓)
duckdb / duckdb (1.021x ➖, 0↑ 7↓)
Full attributed analysis
|
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.949x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.947x ➖, 0↑ 0↓)
datafusion / parquet (0.948x ➖, 0↑ 0↓)
datafusion / arrow (0.917x ➖, 8↑ 0↓)
duckdb / vortex-file-compressed (0.932x ➖, 4↑ 0↓)
duckdb / vortex-compact (0.956x ➖, 0↑ 0↓)
duckdb / parquet (0.953x ➖, 2↑ 0↓)
duckdb / duckdb (0.974x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) duckdb / vortex-file-compressed (0.968x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.990x ➖, 0↑ 0↓)
duckdb / parquet (0.988x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.006x ➖, 1↑ 1↓)
datafusion / parquet (1.013x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (0.983x ➖, 4↑ 1↓)
duckdb / parquet (1.000x ➖, 0↑ 1↓)
duckdb / duckdb (1.003x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.103x ➖, 0↑ 0↓)
datafusion / vortex-compact (0.956x ➖, 0↑ 0↓)
datafusion / parquet (1.033x ➖, 0↑ 0↓)
duckdb / vortex-file-compressed (1.015x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.980x ➖, 0↑ 0↓)
duckdb / parquet (1.011x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.057x ➖, 0↑ 5↓)
datafusion / vortex-compact (1.087x ➖, 0↑ 4↓)
datafusion / parquet (1.023x ➖, 0↑ 2↓)
duckdb / vortex-file-compressed (0.966x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.974x ➖, 0↑ 0↓)
duckdb / parquet (0.981x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.068x ➖, 0↑ 1↓)
datafusion / vortex-compact (1.007x ➖, 0↑ 0↓)
datafusion / parquet (1.166x ➖, 1↑ 2↓)
duckdb / vortex-file-compressed (0.996x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.022x ➖, 0↑ 0↓)
duckdb / parquet (0.962x ➖, 0↑ 0↓)
Full attributed analysis
|
a103738 to
4454bc6
Compare
52289bf to
dbe5a37
Compare
dbe5a37 to
33e6d30
Compare
083b4b4 to
695ce82
Compare
|
Diff size of and bin using this with and without the compare+bitpack |
|
This PR has been marked as stale because it has been open for 14 days with no activity. Please comment or remove the stale label if you wish to keep it active, otherwise it will be closed in 7 days |
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
dbfb7c2 to
6109031
Compare
6109031 to
526936f
Compare
Signed-off-by: Adam Gutglick <adam@spiraldb.com>
After some iterations, this seems to improve performance in any case we actually measure. It does require merging and releasing spiraldb/fastlanes#125.