Add CUDA decompression kernels for OnPair - #8920
Conversation
Merging this PR will improve performance by 30.31%
|
| Mode | Benchmark | BASE |
HEAD |
Efficiency | |
|---|---|---|---|---|---|
| ⚡ | Simulation | decode_varbin[(1000, 4)] |
99.3 µs | 60.1 µs | +65.1% |
| ⚡ | Simulation | cold_misaligned[(64, 256)] |
5.3 ms | 4.4 ms | +20.73% |
| ⚡ | Simulation | compress_fsst[(1000, 64, 8)] |
1.2 ms | 1 ms | +11% |
Tip
Curious why this is faster? Comment @codspeedbot explain why this is faster on this PR, or directly use the CodSpeed MCP with your agent.
Comparing rk/onpairgpu (47ad0ab) with develop (b4b8f54)
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. ↩
|
I made it use the same machinery like #8921 to avoid triple kernel dispatch |
0ax1
left a comment
There was a problem hiding this comment.
lgtm. but worth double checking all index types
|
I am reworking this to make sure all the work happens in one place - there's too many conflation. Will make sure that all non trivial compute is on gpu |
|
@joseph-isaacs have another look |
09207a9 to
1732f2a
Compare
|
I have added a feature to let you spawn work on another stream here #9234. We can then rebase this |
1732f2a to
97a6f0e
Compare
fork() creates a sibling execution context on a stream from the session's round-robin pool with a fresh CPU ExecutionCtx, so independent decode work can be submitted concurrently from one executor. wait_for() orders one context's stream behind another with a CUDA event, without blocking the host — needed when a forked context's output is consumed through raw device pointers (e.g. the CUB shims), which bypass cudarc's cross-stream buffer guards. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MjcUksDnnBeoKUC8t3Twea Signed-off-by: Robert Kruszewski <github@robertk.io>
Signed-off-by: Robert Kruszewski <github@robertk.io>
Signed-off-by: Robert Kruszewski <github@robertk.io>
Drops the sibling-stream fork/wait_for API and decodes the OnPair children, dictionary staging, and row-offset scans sequentially on the caller's stream. Signed-off-by: Robert Kruszewski <robert@spiraldb.com>
97a6f0e to
47ad0ab
Compare
They follow the same pattern as FSST where we let users choose varbin/varbinview