Repository navigation
feat(layout): compile evals, row indices, and takes to pipelines - #10393
Conversation
Merging this PR will degrade performance by 2.15%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | bitpack_blocked_compress_avx512 |
4.8 µs | 5.6 µs | -14.07% |
| ⚡ | WallTime | threshold_avx512[8] |
2.1 µs | 1.9 µs | +11.42% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/exec-4-eval-row-idx-take-nodes (d5fc0af) with develop (62775a6)1
Footnotes
7a91045 to
b21ac66
Compare
|
The failing The one regression is the WallTime There is no fix to port. Generated by Claude Code |
- `EvalNode` applies its bound expression to each array its child produces as it streams through. The child runs over the same selection, so the expression never sees an unselected row. - `RowIdxNode` emits the global row index of every selected row at start, offset by the graph's row offset. - `TakeNode` runs the codes over the selection and the values over their whole domain. It is `Ready::Closed(values)`: it does not run until the values have closed, joins them once, and then wraps each codes array as a dictionary over them as it arrives. Signed-off-by: Joe Isaacs <[email protected]> Co-Authored-By: Claude Fable 5.1 <[email protected]> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3 Signed-off-by: Joe Isaacs <[email protected]>
70332ea to
d5fc0af
Compare
Compiles expressions, row indices, and dictionary takes to pipelines. Tracking: #10349. Stacked on #10392.
Step::Final;Input::EndreturnsStep::End.Source: Operator. Itsready()only checks that dictionary values are complete and codes are available or finished. Its non-blockingcompute()assembles and retains shared dictionary values, then wraps each codes batch as a dictionary. The values inlet remains unbounded because the source needs the complete dictionary.All operators use the inherited
Input::{None, Batch, End}andStep::{End, More, Final}protocol. Readiness handles waiting; computation handles batch construction.Existing tests cover waiting for complete dictionary values, predicates pushed onto values, and expressions evaluated only on selected rows. Runtime continuation and flushing tests are inherited from #10391.
Physical plans and their optimizer live under
vortex_layout::plan::physical. The siblingoperatormodule definesOperator,Source, and the execution context;operatorscontains concrete implementations;pipelineowns compilation, scheduling, and ports.Validation:
cargo +nightly-2026-09-10 fmt -p vortex-layout; scopedcargo clippy -p vortex-layout --all-targets --all-features -- -D warnings; targeted physical-plan tests (97 passed).