Conversation
Merging this PR will degrade performance by 8.3%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | take_fsl_f16_force_per_index[256, 10] |
38 µs | 55.5 µs | -31.54% |
| ❌ | WallTime | filtered_sink_i64_avx2[OneNullInEight] |
22.1 µs | 26.1 µs | -15.21% |
| ❌ | WallTime | decode_avx512[8192, (Inline, OneNullInEight)] |
80.5 µs | 93.5 µs | -13.87% |
| ❌ | Simulation | set_indices_vortex_buffer[128] |
1.8 µs | 2.1 µs | -10.73% |
| ⚡ | WallTime | filtered_sink_i64_avx512[OneNullInEight] |
26.3 µs | 22.3 µs | +17.94% |
| ⚡ | WallTime | scalar_subtract_neon |
13.4 µs | 11.9 µs | +12.98% |
| Simulation | fixed_16_advancing_ptr_safe[100] |
< 1 ns | < 1 ns | N/A | |
| Simulation | preverify_advancing_ptr_unchecked[1000] |
< 1 ns | < 1 ns | N/A | |
| Simulation | preverify_advancing_ptr_unchecked[10000] |
< 1 ns | < 1 ns | N/A | |
| Simulation | bench_compare_sliced_dict_primitive[(3333, 10000)] |
< 1 ns | < 1 ns | N/A |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing mk/decimal-modes (9e757a2) with mk/scheme-registry (80af2c5)2
Footnotes
-
389 benchmarks were skipped, so the baseline results were used instead. If they were deleted from the codebase, click here and archive them to remove them from the performance reports. ↩
-
No successful run was found on
mk/scheme-registry(70b0bfe) during the generation of this report, so 62c3359 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
2fb17f9 to
70b0ab1
Compare
b6464eb to
05b6a70
Compare
70b0ab1 to
830c260
Compare
05b6a70 to
5b0b07b
Compare
830c260 to
80af2c5
Compare
5b0b07b to
ddca038
Compare
80af2c5 to
70b0bfe
Compare
ddca038 to
9e757a2
Compare
Signed-off-by: Matt Katz <mhkatz97@gmail.com>
70b0bfe to
b9329d9
Compare
Signed-off-by: Matt Katz <mhkatz97@gmail.com>
9e757a2 to
17af133
Compare
b9329d9 to
bca8e15
Compare
Stacked on #10034.
Summary
Wide
i128andi256decimals compress into multi-partDecimalBytePartsarrays when the writer permits thevortex.decimal_byte_parts.v2wire format. The registry holds the v1 scheme, which only ever writes the frozen v1 format; permission filtering swaps in the v2 variant wherever the permitted serialized IDs allow it.Changes
vortex-compressor:Scheme::try_upgrade(&self, &HashSet<ArrayId>) -> Option<&'static dyn Scheme>is a new defaulted hook returning a newer variant the permitted IDs support; it must keep theSchemeIdand never downgrade.permit_schemes(schemes, &allowed)(the function behindCompressionSessionExt::permit) calls it for each scheme before filtering by declared IDs, and is exported for callers with an explicit permission set.vortex-btrblocks:DEFAULT_SCHEMESregistersDecimalScheme::v1().DecimalSchemegains v1 and v2 modes withv1()andv2()constructors;Defaultis v1. v1 leaves values wider thani64canonical after narrowing. v2 splits them withsplit_decimaland compresses the most significant part and each lower part as children. Single-part arrays serialize as v1 in either mode.try_upgradereturns a static v2 instance when both decimal IDs are permitted; an explicitly listed v2 is dropped, not downgraded, when either ID is missing.vortex-file: with editions disabled the writer now permits every registered serialized ID throughpermit_schemes, so the upgrade applies there too.vortex-cuda:cuda_compatible_schemespins the decimal scheme to v1 after permissions are applied, since multi-part arrays have no CUDA decode kernel.Behavior
WriteStrategyBuilder::from_sessionkeep the enabled editions' permissions even when a write disables editions.Tests
vortex-btrblocks/tests/decimal_config.rs: mode selection against the core edition and explicit ID sets, v2 on top of the core edition, explicit modes only upgrade, exclusion is not undone by an upgrade, and signed/nullablei128/i256round trips with and without child compression.vortex-file: the default writer splits wide decimals only with editions disabled; strategies built from the session keep the enabled editions' permissions.Validation
Run locally:
cargo +nightly-2026-09-10 fmton the touched crates;cargo clippy --all-targets --all-features -- -D warningsonvortex-compressor,vortex-btrblocks,vortex-file,vortex(clean);cargo nextest run --all-featuresonvortex-compressor,vortex-btrblocks,vortex-file(296 passed, 1 skipped); doctests on the same three crates (passed). Not run:vortex-cuda, which needsnvcc.