Skip to content

feat(layout): compile evals, row indices, and takes to pipelines - #10393

Open
joseph-isaacs wants to merge 6 commits into
ji/exec-3-scan-concat-pack-nodesfrom
ji/exec-4-eval-row-idx-take-nodes
Open

joseph-isaacs wants to merge 6 commits into
ji/exec-3-scan-concat-pack-nodesfrom
ji/exec-4-eval-row-idx-take-nodes

Conversation

@joseph-isaacs

@joseph-isaacs joseph-isaacs commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Stacked on #10392. Implements the pipeline compile hooks for expressions, row indices, and dictionaries.

Changes

  • Eval adds a stage that applies 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.

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

@codspeed

codspeed Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

Merging this PR will improve performance by 13.68%

⚠️ Unknown Walltime execution environment detected

Using the Walltime instrument on standard Hosted Runners will lead to inconsistent data.

For the most accurate results, we recommend using CodSpeed Macro Runners: bare-metal machines fine-tuned for performance measurement consistency.

⚠️ 15 benchmarks spent significant time in system calls

System calls cannot be consistently instrumented, so they are not included in the measure, which understates the real cost. Please switch to the Walltime instrument to accurately measure system calls.

Measurement and system calls

⚠️ Different runtime environments detected

Some benchmarks with significant performance changes were compared across different runtime environments,
which may affect the accuracy of the results.

Open the report in CodSpeed to investigate

⚡ 1 improved benchmark
✅ 2182 untouched benchmarks
⏩ 359 skipped benchmarks1

Performance Changes

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)

Open in CodSpeed

Footnotes

  1. 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. ↩

@joseph-isaacs
joseph-isaacs added this pull request to stack #10395 October 8, 2026 16:01
- `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
claude added 2 commits October 9, 2026 19:04
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
@joseph-isaacs joseph-isaacs changed the title feat(layout): add Eval, RowIdx, and Take exec nodes feat(layout): compile evals, row indices, and takes to pipelines Oct 9, 2026
claude added 3 commits October 9, 2026 19:46
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

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants