GPU: fuse dictionaries with nullable codes - #9435
Conversation
Merging this PR will degrade performance by 11.76%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ❌ | WallTime | words_gather_scalar[65536] |
8.2 µs | 9.4 µs | -12.4% |
| ❌ | WallTime | words_gather_dispatch[1024] |
8 ns | 9 ns | -11.11% |
Tip
Investigate this regression by commenting @codspeedbot fix this regression on this PR, or directly use the CodSpeed MCP with your agent.
Comparing joe/gpu-nullable-dictionary-dispatch (55cf62c) with develop (b825c4f)
Footnotes
-
46 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. ↩
e271be1 to
1338a6a
Compare
e04e1fa to
bf50ff8
Compare
bf50ff8 to
6dcb661
Compare
Signed-off-by: Joe Isaacs <2413449+joseph-isaacs@users.noreply.github.com>
6dcb661 to
55cf62c
Compare
Independent of the other follow-up PRs; based directly on #9147. This draft contains one reviewable GPU correctness or performance concern.
What
Why this is needed
This is not required by the current BtrBlocks GPU benchmark path. Vortex's normal
DictEncoderintentionally stores nulls in the dictionary values so generated codes remain non-null. Nullable codes are nevertheless legal for externally supplied or transformedDictArrayvalues; their physical null slots may contain arbitrary/out-of-range bits, so the bounds check is needed if CUDA claims support for that legal representation.Recommendation: keep this as an independent general CUDA compatibility PR only if that scope is wanted; otherwise close/defer it rather than presenting it as a benchmark optimization.
Validation
Checked independently against this PR's current base:
cargo check -p vortex-cuda --all-featuresThe combined implementation also passed Rust/CUDA formatting, 164 focused dynamic-dispatch tests, and 28 focused constant-array tests.