feat(array): add scalar probes with lazy child contexts - #9843
feat(array): add scalar probes with lazy child contexts#9843joseph-isaacs wants to merge 2 commits into
Conversation
Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
Merging this PR will regress 3 benchmarks
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | arrow_checked_add_u32_neon[16384] |
12.3 µs | 20.3 µs | -39.69% |
| ❌ | Simulation | random_i16[0.95] |
80.3 µs | 99.5 µs | -19.27% |
| ❌ | WallTime | words_gather_scalar_avx2[1024] |
147 ns | 165 ns | -10.91% |
| ⚡ | WallTime | mul_u64_nonnull_neon |
21 µs | 15.2 µs | +37.95% |
| ⚡ | Simulation | random_i8[0.5] |
94.7 µs | 71.8 µs | +31.84% |
| ⚡ | WallTime | filtered_sink_i64_avx512[NineNullsInTen] |
17.2 µs | 13.9 µs | +23.67% |
| ⚡ | WallTime | filtered_sink_i64_avx2[OneNullInEight] |
31.1 µs | 25.4 µs | +22.38% |
| ⚡ | WallTime | filtered_sink_i64_avx2[NineNullsInTen] |
16.2 µs | 13.4 µs | +20.7% |
| ⚡ | WallTime | filtered_sink_i64_avx512[OneNullInEight] |
31.8 µs | 26.6 µs | +19.33% |
| ⚡ | WallTime | mul_i64_nonnull_neon |
20.2 µs | 17.1 µs | +18.22% |
| ⚡ | WallTime | multiply_shapes_neon[(16384, PerRowPerRow)] |
20.2 µs | 17.1 µs | +17.72% |
| ⚡ | WallTime | filtered_owned_i64_avx2[OneNullInEight] |
25.8 µs | 22.1 µs | +16.88% |
| ⚡ | WallTime | dict_canonicalize_gt_u8_neon[1000000] |
560.2 µs | 487.4 µs | +14.95% |
| ⚡ | WallTime | words_gather_scalar_avx2[65536] |
9.4 µs | 8.2 µs | +13.54% |
| ⚡ | Simulation | allocate_drop_arrow[0] |
456.9 ns | 402.7 ns | +13.45% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/array-probe-api (9ca43c4) with develop (8f3dfb4)
Footnotes
-
218 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. ↩
Replace inline type-erased storage with a lazy boxed implementation and leave a FIXME to revisit inline storage only if benchmarks justify it. Signed-off-by: Joe Isaacs <joe.isaacs@live.co.uk>
a7c63a2 to
9ca43c4
Compare
Adds a probe API for repeated
scalar_atAdds an encoding vtable.
Encodings without preparation use
ProbeState<'a> = ()and the default hook. Overrides receiveProbeAccess::Once(array)orRepeated(state). Child reads useprobe.slot(slot)?.execute_scalar(index, ctx)?, preserving preparation recursively.The encoding implementations are in #9844. For PCO, assuming both indices fall in the same decoded page, that follow-up enables: