Optimize hash full join - #23521
Conversation
|
Auto-sync is disabled for draft pull requests in this repository. Workflows must be run manually. Contributors can view more details about this message here. |
|
/ok to test 1973121 |
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Enterprise Run ID: 📒 Files selected for processing (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughSummary by CodeRabbit
WalkthroughFull hash joins now record matched right-table rows in a device buffer. Full-join sizing and finalization use this buffer to count and append unmatched right rows. Related join paths pass the updated finalization argument. ChangesFull-join match tracking
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (1)
cpp/tests/join/join_tests.cpp (1)
1717-1723: 📐 Maintainability & Code Quality | 🔵 TrivialVerify the required code-owner approvals.
This file matches
cpp/**/*.cpp. Obtain at least two approvals fromcudf-cpp-codeownersbefore merge.As per coding guidelines, changes to libcudf C++ files require at least two approvals from
cudf-cpp-codeowners.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@cpp/tests/join/join_tests.cpp` around lines 1717 - 1723, Obtain at least two approvals from the cudf-cpp-codeowners group for the changes in the C++ test file before merging.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@cpp/src/join/hash_join/full_join_size_impl.cu`:
- Around line 20-24: Update the device lambda predicate passed to count_if in
the full join size implementation to explicitly declare its return type as bool,
while preserving its existing is_matched == 0 condition.
- Around line 50-51: Update the right_matches allocation in the full-join size
implementation to use cudf::get_current_device_resource_ref() instead of mr. If
mr is no longer referenced, remove it from the internal interface or explicitly
mark it unused while preserving the existing allocation behavior.
In `@cpp/src/join/join_common_utils.hpp`:
- Around line 75-80: Reorder finalize_full_join so right_matches precedes stream
and mr, remove its default argument, and update the Doxygen parameter order. In
cpp/src/join/join_utils.cu:91-92 and cpp/src/join/mixed_join.cu and
cpp/src/join/conditional_join.cu, pass {} explicitly for no-flag calls; in
cpp/src/join/hash_join/retrieve_impl.cuh:216-218, update the caller to the same
argument order.
---
Nitpick comments:
In `@cpp/tests/join/join_tests.cpp`:
- Around line 1717-1723: Obtain at least two approvals from the
cudf-cpp-codeowners group for the changes in the C++ test file before merging.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: aae2eb87-9bef-4a0a-a544-63a0a1210c35
📒 Files selected for processing (6)
cpp/src/join/hash_join/dispatch.cuhcpp/src/join/hash_join/full_join_size_impl.cucpp/src/join/hash_join/retrieve_impl.cuhcpp/src/join/join_common_utils.hppcpp/src/join/join_utils.cucpp/tests/join/join_tests.cpp
NVBench comparison: hash full joinReference: PR base at Coverage: Command: full_joinhigh_multiplicity_full_join[0] NVIDIA GH200 480GB
Summary
|
Description
This PR tracks matched right-table rows during hash full join retrieval, eliminating output-sized temporary storage and a subsequent scatter when finding unmatched rows. It also reserves space for the right-side complement and fixes
full_join_sizewhen the left table is empty.Checklist