-
Notifications
You must be signed in to change notification settings - Fork 310
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Define a selection primtive API #2586
Define a selection primtive API #2586
Conversation
rerun tests |
Codecov Report
@@ Coverage Diff @@
## branch-22.10 #2586 +/- ##
===============================================
Coverage ? 61.11%
===============================================
Files ? 106
Lines ? 5634
Branches ? 0
===============================================
Hits ? 3443
Misses ? 2191
Partials ? 0 Help us with your feedback. Take ten seconds to tell us how you rate us. Have a feature suggestion? Share it here. |
…election_primitive_api
…election_primitive_api
typename T> | ||
std::tuple<std::optional<rmm::device_uvector<size_t>>, | ||
decltype(allocate_dataframe_buffer<T>(size_t{0}, rmm::cuda_stream_view{}))> | ||
per_v_random_select_and_transform_outgoing_e(raft::handle_t const& handle, |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@ChuckHastings What do you think about select_and_transfrom
vs select_transform
in the primitive name?
I initially picked former but now getting more inclined to the latter as it is less verbose and more in line with other std:: thrust:: functions like partitoin_copy
, transform_reduce
, and so on. I guess removing and
here won't cause much confusion?
I have a similar issue in naming extract_and_transform_if...
primitives (a modification of the existing extract_if_e
primitive to allow not just extracting an edge (source, destination, weight) triplets but to allow including edge IDs and types and so on... I feel like extract_transform
may work better than extract_and_transform
...
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I think removing the _and
from the name is reasonable. As you observe, the thrust model doesn't include and conjunctions, they are implied.
@gpucibot merge |
Partially address #2580.
This PR is dependent on #2584.
This PR defines API for two selection primitives, one for the biased sampling/random walk and another for uniform random sampling/random walk.
@ChuckHastings For Node2Vec style random walk,
We can compute intersections for each (previous vertex, current vertex pairs).
We need to first create a non-detail space primitive calling detail::nbr_intersection (https://github.com/rapidsai/cugraph/blob/branch-22.10/cpp/src/prims/detail/nbr_intersection.cuh#L492) for given vertex pairs (this can be used for Jaccard and Overlap coefficients as well).
In MG, each GPU should store neighbor intersection outputs for the relevant source/destination ranges (not sure whether should we create additional utility functions to handle this, or this may not be a recurring pattern, so just leave this task much more as a dark magic for advanced users who understand how the 2D partitioning actually works). May go for the latter till we see this pattern occurring in other places.
Once we have neighbor intersection outputs and previous vertex IDs for the relevant (previous vertex ID, current vertex ID) pairs, we can create
frontier
having tagged-current vertex ID values (tag is an index to access previous vertex ID and neighbor intersection outputs for the perv vertex, current vertex pair).Then,
e_bias_op
can check whether the outgoing neighbor belongs to the intersection or coincides with the previous vertex to properly set bias values.