Support runend canonicalization for lists - #9708
Conversation
78849fb to
cec8d20
Compare
Merging this PR will regress 1 benchmark
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | random_i8[0.8] |
68.9 µs | 98.2 µs | -29.86% |
| ⚡ | Simulation | random_i16[0.8] |
92.1 µs | 74 µs | +24.45% |
| ⚡ | WallTime | words_gather_scalar_avx2[65536] |
9.3 µs | 8.2 µs | +13.49% |
| ⚡ | Simulation | allocate_drop_arrow[0] |
456.9 ns | 402.7 ns | +13.45% |
| ⚡ | Simulation | allocate_drop_bytes[0] |
520.2 ns | 466 ns | +11.62% |
| ⚡ | WallTime | mul_i32_nonnull_avx512 |
7.9 µs | 7.1 µs | +11.59% |
| ⚡ | WallTime | mul_u32_nonnull_avx512 |
6.3 µs | 5.7 µs | +10.61% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing dk/runend-list-canonicalize (d7ddd10) with develop (dab1684)
Footnotes
-
206 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. ↩
Signed-off-by: Daniel King <dan@spiraldb.com>
cec8d20 to
692c7e6
Compare
| Validity::Array(validity) => Validity::Array(runend_decode_bools( | ||
| ends, | ||
| validity.execute_as::<BoolArray>("validity", ctx)?, | ||
| offset, | ||
| length, | ||
| ctx, | ||
| )?), | ||
| }; |
There was a problem hiding this comment.
i guess you could leave the validity as a run end array?
There was a problem hiding this comment.
@joseph-isaacs I actually wanted to ask you about that!
Would it be copacetic to simply recreate three RunEndArray's for the offsets, the sizes, and the validity? Or is that not what this method is supposed to do?
There was a problem hiding this comment.
I changed it to just push the RunEnd into the offsets, sizes, and validity.
| let decoded_offsets = | ||
| runend_decode_primitive(ends.clone(), offsets, offset, length, ctx)?.into_array(); | ||
|
|
||
| let sizes = values.sizes().clone().execute_as("sizes", ctx)?; | ||
| let decoded_sizes = | ||
| runend_decode_primitive(ends.clone(), sizes, offset, length, ctx)?.into_array(); |
There was a problem hiding this comment.
I wonder if its worth fusing these two decode, seem like it will be much faster?
There was a problem hiding this comment.
this is now made irrelevant though this is still an interesting question.
Signed-off-by: Daniel King <dan@spiraldb.com>
Summary
Tests