perf: Arc::ptr_eq short-circuit for List & FixedSizeList DType eq#7410
perf: Arc::ptr_eq short-circuit for List & FixedSizeList DType eq#7410
Arc::ptr_eq short-circuit for List & FixedSizeList DType eq#7410Conversation
…uality Extend the Arc::ptr_eq fast-path from #7398 to cover the remaining Arc-containing DType variants. List and FixedSizeList hold a bare Arc<DType> in the enum variant, so the shortcut is applied in DType's manual PartialEq impl. StructFields already handles its own Arc::ptr_eq internally. The mismatch arms enumerate every variant in the first position so that adding a new DType variant produces a non-exhaustive match compile error. DuckDB StatPopGen full-suite apmc measurement for vortex, averaged over two runs: - Cycles: -5.4% (5,973M → 5,651M) - Instructions: -15.3% (15,491M → 13,121M) - L1D_CACHE_MISS_LD: -0.8% (56.2M → 55.7M) - MAP_STALL: -0.2% (1,347M → 1,344M) Signed-off-by: Alexander Droste <alexander.droste@protonmail.com>
Arc::ptr_eq short-circuit for List and FixedSizeList DType eqArc::ptr_eq short-circuit for List & FixedSizeList DType eq
Polar Signals Profiling ResultsLatest Run
Powered by Polar Signals Cloud |
Benchmarks: PolarSignals ProfilingVortex (geomean): 0.971x ➖ datafusion / vortex-file-compressed (0.971x ➖, 1↑ 0↓)
|
File Sizes: PolarSignals ProfilingNo file size changes detected. |
Benchmarks: TPC-H SF=1 on NVMEVerdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (0.929x ➖, 5↑ 0↓)
datafusion / vortex-compact (0.957x ➖, 0↑ 0↓)
datafusion / parquet (0.924x ➖, 5↑ 0↓)
datafusion / arrow (0.965x ➖, 4↑ 0↓)
duckdb / vortex-file-compressed (0.920x ➖, 7↑ 0↓)
duckdb / vortex-compact (0.926x ➖, 4↑ 0↓)
duckdb / parquet (0.992x ➖, 3↑ 5↓)
duckdb / duckdb (0.905x ➖, 10↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=1 on NVMENo file size changes detected. |
Benchmarks: FineWeb NVMeVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.104x ❌, 0↑ 4↓)
datafusion / vortex-compact (0.980x ➖, 0↑ 0↓)
datafusion / parquet (0.942x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (0.986x ➖, 1↑ 0↓)
duckdb / vortex-compact (0.988x ➖, 1↑ 0↓)
duckdb / parquet (0.991x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: FineWeb NVMeNo file size changes detected. |
Benchmarks: TPC-DS SF=1 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.000x ➖, 1↑ 0↓)
datafusion / vortex-compact (1.001x ➖, 0↑ 0↓)
datafusion / parquet (0.996x ➖, 1↑ 0↓)
duckdb / vortex-file-compressed (1.008x ➖, 2↑ 3↓)
duckdb / vortex-compact (1.002x ➖, 2↑ 1↓)
duckdb / parquet (0.995x ➖, 1↑ 0↓)
duckdb / duckdb (0.996x ➖, 2↑ 1↓)
Full attributed analysis
|
File Sizes: TPC-DS SF=1 on NVMENo file size changes detected. |
Benchmarks: TPC-H SF=10 on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (0.888x ✅, 16↑ 0↓)
datafusion / vortex-compact (0.886x ✅, 15↑ 0↓)
datafusion / parquet (0.910x ➖, 10↑ 0↓)
datafusion / arrow (0.882x ✅, 14↑ 0↓)
duckdb / vortex-file-compressed (0.901x ➖, 12↑ 0↓)
duckdb / vortex-compact (0.907x ➖, 8↑ 0↓)
duckdb / parquet (0.964x ➖, 1↑ 0↓)
duckdb / duckdb (0.946x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: TPC-H SF=10 on NVMENo file size changes detected. |
Benchmarks: Statistical and Population GeneticsVerdict: No clear signal (low confidence) duckdb / vortex-file-compressed (0.984x ➖, 0↑ 0↓)
duckdb / vortex-compact (0.990x ➖, 0↑ 0↓)
duckdb / parquet (0.982x ➖, 0↑ 0↓)
Full attributed analysis
|
File Sizes: Statistical and Population GeneticsNo file size changes detected. |
Benchmarks: Clickbench on NVMEVerdict: No clear signal (low confidence) datafusion / vortex-file-compressed (1.035x ➖, 1↑ 5↓)
datafusion / parquet (1.041x ➖, 0↑ 3↓)
duckdb / vortex-file-compressed (1.010x ➖, 7↑ 5↓)
duckdb / parquet (1.031x ➖, 0↑ 1↓)
duckdb / duckdb (0.990x ➖, 2↑ 1↓)
Full attributed analysis
|
File Sizes: Clickbench on NVMEFile Size Changes (101 files changed, -33.3% overall, 0↑ 101↓)
Totals:
|
Benchmarks: FineWeb S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (0.842x ➖, 1↑ 0↓)
datafusion / vortex-compact (1.027x ➖, 0↑ 1↓)
datafusion / parquet (0.968x ➖, 1↑ 1↓)
duckdb / vortex-file-compressed (1.023x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.062x ➖, 0↑ 1↓)
duckdb / parquet (1.027x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: TPC-H SF=1 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.053x ➖, 0↑ 4↓)
datafusion / vortex-compact (0.957x ➖, 4↑ 4↓)
datafusion / parquet (1.096x ➖, 1↑ 4↓)
duckdb / vortex-file-compressed (1.032x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.010x ➖, 0↑ 0↓)
duckdb / parquet (1.005x ➖, 0↑ 0↓)
Full attributed analysis
|
Benchmarks: TPC-H SF=10 on S3Verdict: No clear signal (environment too noisy confidence) datafusion / vortex-file-compressed (1.029x ➖, 1↑ 3↓)
datafusion / vortex-compact (1.031x ➖, 0↑ 1↓)
datafusion / parquet (1.112x ➖, 0↑ 6↓)
duckdb / vortex-file-compressed (0.989x ➖, 0↑ 0↓)
duckdb / vortex-compact (1.001x ➖, 0↑ 0↓)
duckdb / parquet (0.981x ➖, 0↑ 0↓)
Full attributed analysis
|
Extend the
Arc::ptr_eqfast-path from #7398 to cover the remaining Arc-containing DType variants. List and FixedSizeList hold a bareArc<DType>in the enum variant, so the shortcut is applied inDType's manualPartialEqimpl.StructFieldsalready handles its ownArc::ptr_eqinternally.The mismatch arms enumerate every variant in the first position so that adding a new DType variant produces a non-exhaustive match compile error.
DuckDB StatPopGen full-suite apmc measurement for vortex, averaged over two runs: