Repository navigation
feat(layout): compile evals, row indices, and takes to pipelines - #10393
joseph-isaacs wants to merge 6 commits into
Conversation
Merging this PR will improve performance by 13.68%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ⚡ | WallTime | bitpack_blocked_compress_avx2 |
7.6 µs | 6.7 µs | +13.68% |
Tip
Curious why performance improved? Comment @codspeedbot explain why performance improved on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ji/exec-4-eval-row-idx-take-nodes (40e14e8) with ji/exec-3-scan-concat-pack-nodes (a6f9c85)
Footnotes
-
359 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. ↩
- `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 <joe.isaacs@live.co.uk> Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
7a91045 to
b21ac66
Compare
Merges the scan, filter, concat, and pack rules from ji/exec-3-scan-concat-pack-nodes and replaces this branch's exec nodes with compile rules on the plans: - Eval adds a stage applying its expression to each batch of its child's chain. - RowIdx emits the global index of every selected row as one batch. - Take reads its values over their whole domain into an unbounded inlet and wraps each batch of codes as a dictionary over them once they are whole; its values are read once per scan however many splits read them. Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
# Conflicts: # vortex-layout/src/plan/pipeline/tests.rs
Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
…s misaligned fields Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
…ource Signed-off-by: Claude <noreply@anthropic.com> Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3
Summary
Stacked on #10392. Implements the pipeline compile hooks for expressions, row indices, and dictionaries.
Changes
Tests check that a take emits nothing before its values are whole, including when a predicate was pushed onto the values, and that an expression sees only the selected rows.
Checks run:
cargo clippy -p vortex-layout --all-targets --all-features -- -D warnings,cargo test -p vortex-layout --lib,cargo +nightly-2026-09-10 fmt -p vortex-layout.🤖 Generated with Claude Code
https://claude.ai/code/session_01NWYmfHTFtaEdhdyd3u5hv3