Implement RowFn batch execution - #9450
Conversation
Merging this PR will regress 1 benchmark
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | Simulation | chunked_varbinview_opt_into_canonical[(10, 100)] |
591.9 µs | 660.2 µs | -10.34% |
| ⚡ | WallTime | words_gather_scalar[65536] |
9.4 µs | 8.3 µs | +13.58% |
| ⚡ | Simulation | compress_fsst[(500, 64, 8)] |
582.1 µs | 524.5 µs | +10.98% |
| ⚡ | Simulation | compress_fsst[(500, 64, 4)] |
517.1 µs | 468.3 µs | +10.42% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing ct/row-fn-batch (dae66b7) with develop (27e6b40)2
Footnotes
-
442 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. ↩
-
No successful run was found on
develop(2322a97) during the generation of this report, so 27e6b40 was used instead as the comparison base. There might be some changes unrelated to this pull request in this report. ↩
f1cdfed to
a80d07c
Compare
a80d07c to
5ab22f2
Compare
170a3c4 to
685de49
Compare
685de49 to
daae104
Compare
## Rationale for this change - Tracking issue: #9130 - API tracking: #9129 - Epic: #9128 Implements typed row execution for the contracts in #9386. Batch planning and orchestration are split into #9450. ## What changes are included in this PR? Adds owned-output and sink-writing row loops, prepared and deferred execution, the `ViewLen` contract, and decoding validation. This layer does not yet connect the row loops to `execute_rows`. ## What APIs are changed? Are there any user-facing changes? Extends the existing `unstable_row_fns` API. There are no stable API changes. --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
e22370d to
9476082
Compare
a547c07 to
4abc1cd
Compare
ec091a4 to
f2c1dc8
Compare
RowFn batch execution
f2c1dc8 to
823efcd
Compare
823efcd to
8fe824a
Compare
8fe824a to
0702fc3
Compare
|
actually Im going to split out a bunch of the cleanup changes |
cc468e2 to
9397843
Compare
## Rationale for this change - Progress towards #9130 - API tracking: #9129 - Epic: #9128 Separates the mechanical `RowFn` cleanup from batch execution in #9450. ## What changes are included in this PR? Renames the fallibility constants to the positive `INFALLIBLE` contract, removes `RowExecution` and `DenseWithRetry`, and returns arrays directly from the executors. The tuple guard checks every decoded view length before unchecked row access because `ViewLen::len` returns one member length after its debug assertion. ## What APIs are changed? Are there any user-facing changes? Renames the unstable `RowFn::FALLIBLE` and `SinkResult::FALLIBLE` associated constants to `INFALLIBLE`. There are no stable API changes. --------- Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
9397843 to
1125097
Compare
| pub(super) use super::visitor::RowPolicy; | ||
|
|
||
| /// The same-length input columns and metadata for one row-function execution. | ||
| pub(crate) struct Batch { |
There was a problem hiding this comment.
This is function args? No
Rename `Batch` to `RowFnExecutionArgs` and `BorrowedExecutionArgs` to `BorrowedRowFnArgs` so both names say which layer owns them. Signed-off-by: Connor Tsui <connor@spiraldb.com>
## Rationale for this change - Stacked on: #9450 - Tracking issue: #9130 - Epic: #9128 Adds direct valid-row execution for owned `RowFn` outputs before the first nullable deferred owned consumer. ## What changes are included in this PR? Adds `Default` to `OutputElement` and uses it only to initialize skipped output positions. Batch execution masks those positions before returning the array. Owned infallible and deferred visits execute directly over null-tolerant decoded inputs. Unsupported encodings continue to decline this path; #9349 adds the later filter-and-scatter fallback. ## What APIs are changed? Are there any user-facing changes? Extends the unstable `OutputElement` contract with `Default`. There are no stable API changes. Signed-off-by: Connor Tsui <connor.tsui20@gmail.com>
Rationale for this change
RowFnexecution contracts #9496RowFnover Vortex arrays #9130RowFnAPI #9129Connects the row execution layer to the scalar-function adapter.
What changes are included in this PR?
Adds constant handling, strict validity propagation, dense execution, direct valid-row execution for supporting sinks, and output validation. A partially valid signature that cannot execute directly on valid rows panics in this layer.
Encoding-aware reductions remain in #9347. Filter-and-scatter remains in #9349. Owned valid-row execution and its
Defaultbound are in #9500. Nullary execution is in #9469.What APIs are changed? Are there any user-facing changes?
Adds execution internals within the existing
unstable_row_fnsboundary. There are no stable API changes.