You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ced8ec9
Browse filesBrowse the repository at this point in the historyBrowse files
authored
fix(cuda): copy encoded device-resident children to the host in into_host (#10916)
## Summary
- Tracking Issue: #10914
`compress-bench --gpu-decompress --gpu-verify` panics with `expected
host buffer` on develop for CMSprovider and Euro2016. A run-end encoded
validity mask stays encoded on the device after `execute_cuda`.
`CanonicalCudaExt::into_host` then executes it on the host while its
buffers are still on the device (`validity_into_host` →
`child_into_host` → `RunEnd::execute` → `runend_decode_bools` →
`BufferHandle::as_host`).
A nullable dictionary's validity, a lazy `take` through device-resident
codes, fails the same way.
## Changes
- `canonical.rs`: `child_into_host` copies every device buffer of a
child that isn't canonical to the host before executing it there.
- Children that are already canonical take the existing path.
- The copies run concurrently, and an array's buffers are replaced only
when one of them moves (Sparse rejects buffer replacement).
- The decode path is unchanged.
- This doesn't add mixed CPU/GPU execution (#7838): the child moves to
the host whole, so nothing decodes from device buffers on the host.
- Tests (4), each building the child on the device and comparing
`into_host` with the expected result:
- a primitive array whose validity is a run-end encoded mask;
- one whose validity is a sparse mask (Sparse keeps its fill value in a
host buffer it doesn't allow to be replaced, so only its children move);
- a string dictionary with nullable values and device-resident codes;
- a primitive dictionary with nullable values and device-resident codes.
Evidence (A40, CUDA 13.0):
| Check | develop | this PR |
|---|---|---|
| The 4 tests | all fail: `expected host buffer` (run-end mask),
`as_slice must be called on host buffer` (sparse mask, both
dictionaries) | 4 pass |
| `--gpu-verify` on CMSprovider and Euro2016, today's preset | both
panic | both pass (234 and 22 fields verified) |
| `vortex-cuda` lib suite | — | 711 passed, 0 failed |
Everything in the table ran on this PR alone. With all three PRs,
`--gpu-verify` passes on all 17 GPU-suite datasets.
## AI assistance
Developed with Claude Code (Claude Opus 5.5), which wrote most of the
code, tests and this description under my direction. I reviewed the diff
and the measurements.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Signed-off-by: Tanish Gudise <[email protected]>
Co-authored-by: Claude Opus 5.5 <[email protected]>
Co-authored-by: Alexander Droste <[email protected]>
0 commit comments