Skip to content

Fix compute-sanitizer racecheck hazards in DELTA_BYTE_ARRAY decode path - #23910

Merged
rapids-bot[bot] merged 1 commit into
NVIDIA:mainfrom
pramodsatya:fix-delta-byte-array-racecheck
Sep 1, 2026
Merged

Fix compute-sanitizer racecheck hazards in DELTA_BYTE_ARRAY decode path#23910
rapids-bot[bot] merged 1 commit into
NVIDIA:mainfrom
pramodsatya:fix-delta-byte-array-racecheck

Conversation

@pramodsatya

@pramodsatya pramodsatya commented Sep 1, 2026

Copy link
Copy Markdown
Contributor

Description

Fixes compute-sanitizer racecheck hazards in the Parquet DELTA_BYTE_ARRAY decode path.

The prefix and suffix length decoders are traversed concurrently on separate warps but dispatched through a runtime-selected delta_binary_decoder pointer (db = mgr == 0 ? &prefixes : &suffixes). Since the target is not known at compile time, the compiler speculatively loads both sub-objects on every db-> access, so one warp reads the other's decoder state while it is being written, which racecheck reports as a cross-warp hazard.

Dispatches to each decoder through a compile-time-constant object per warp instead, matching the main decode loop. This is semantically identical and only changes codegen.

Closes #23900

Checklist

  • I am familiar with the Contributing Guidelines.
  • New or existing tests cover these changes.
  • The documentation is up to date with these changes.

@copy-pr-bot

copy-pr-bot Bot commented Sep 1, 2026

Copy link
Copy Markdown

This pull request requires additional validation before any workflows can run on NVIDIA's runners.

Pull request vetters can view their responsibilities here.

Contributors can view more details about this message here.

@github-actions github-actions Bot added the libcudf Affects libcudf (C++/CUDA) code. label Sep 1, 2026
@pramodsatya
pramodsatya marked this pull request as ready for review September 1, 2026 01:58
@pramodsatya
pramodsatya requested a review from a team as a code owner September 1, 2026 01:58
@coderabbitai

coderabbitai Bot commented Sep 1, 2026

Copy link
Copy Markdown

Review Change Stack

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Enterprise

Run ID: 16047642-8a00-4acd-9930-640d239c70bf

📥 Commits

Reviewing files that changed from the base of the PR and between e3fd258 and 515fd04.

📒 Files selected for processing (2)
  • cpp/src/io/parquet/page_delta_decode.cu
  • cpp/src/io/parquet/page_string_decode.cu

Included review availability: Your plan provides up to 12 included reviews per hour; 11 remain after this review.


📝 Walkthrough

Summary by CodeRabbit

  • Performance
    • Improved Parquet string decoding efficiency by assigning prefix and suffix processing to dedicated GPU warps.
    • Preserved existing byte-size and maximum-length calculations while reducing runtime dispatch overhead.

Walkthrough

Changes

DELTA_BYTE_ARRAY decoding

Layer / File(s) Summary
Warp-specific skip dispatch
cpp/src/io/parquet/page_delta_decode.cu
skip directly decodes prefixes on warp 0 and suffixes on warp 1.
Warp-specific size traversal
cpp/src/io/parquet/page_string_decode.cu
totalDeltaByteArraySize uses shared traversal logic and explicitly assigns prefix and suffix processing to separate warps.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Merge Risk: ⚪ Minimal · up to 515fd

The PR changes decoder dispatch to use compile-time-resolved prefix and suffix paths while preserving decode behavior, reducing reported racecheck hazards without introducing a supported merge-blocking risk. No actionable merge-blocking risk remains beyond normal checks and review.

Suggested reviewers: igorpeshansky, pmattione-nvidia, mhaseeb123

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: fixing compute-sanitizer racecheck hazards in the Parquet DELTA_BYTE_ARRAY decode path.
Description check ✅ Passed The description directly explains the racecheck hazard, the runtime-selected decoder pointer, the compile-time dispatch fix, and the linked issue.
Linked Issues check ✅ Passed The changes address issue #23900 by replacing runtime-selected prefix and suffix decoder access with explicit warp-specific dispatch in both affected traversal paths. This targets the reported cross-w…
Out of Scope Changes check ✅ Passed The changes are limited to Parquet DELTA_BYTE_ARRAY decoder dispatch logic and directly support the racecheck fix described in issue #23900. No unrelated changes are present.
Docstring Coverage ✅ Passed Docstring coverage is 100.00% which is sufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 2 functions across 2 files.
Full details: Linked Issues check

Explanation

The changes address issue #23900 by replacing runtime-selected prefix and suffix decoder access with explicit warp-specific dispatch in both affected traversal paths. This targets the reported cross-warp racecheck hazards.

✨ Finishing Touches 💡 1
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests

Comment @coderabbitai help to get the list of available commands.

@davidwendt davidwendt added bug Something isn't working 3 - Ready for Review Ready for review by team non-breaking Non-breaking change labels Sep 1, 2026
@davidwendt

Copy link
Copy Markdown
Contributor

/ok to test 515fd04

@davidwendt

Copy link
Copy Markdown
Contributor

/merge

@rapids-bot
rapids-bot Bot merged commit 6253548 into NVIDIA:main Sep 1, 2026
162 of 163 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

3 - Ready for Review Ready for review by team bug Something isn't working libcudf Affects libcudf (C++/CUDA) code. non-breaking Non-breaking change

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[BUG] compute-sanitizer racecheck hazards in DELTA_BYTE_ARRAY decode path (delta_binary.cuh)

3 participants