[WIP] Robin Hood Hashing - #818
Conversation
|
/ok to test 1f3d64e |
|
@aterenin Just wanted to let you know we haven't forgotten about this work! @sleeepyjack and I are discussing the new design and will align on a concrete proposal before moving forward to minimize unnecessary iterations. We'll keep you posted. |
|
Sounds good! The current WIP implements everything needed, along with tests. I've carefully gone over all the core logic, and I think is reasonably close to ready-to-review. The main remaining item I was planning to think about more is whether there is a more maintenance-friendly way to organize and structure the code, which is what the "big question" in the PR centers on. I also have a list of a bunch of subtleties worth mentioning, but these should wait until a review. If discussion would help, I'd be happy to jump on a Zoom call - just let me know! |
|
We've had a chance to evaluate the proposal and would be interested in discussing it further over a video call. @aterenin Could you send your availability and preferred contact details to yunsongw@nvidia.com? Wednesday through Friday next week would work well on our end. Once we have a few time slots, we can coordinate and send out a meeting invite. |
|
Email headed your way! |
|
@PointKernel / @sleeepyjack Would you mind giving an OK to test on 628889a? (Additional note: this is not quite ready for review yet - stay tuned for that) |
|
/ok to test 628889a |
|
@PointKernel And can we try again with another OK to test? (Sorry for long delay - just got back from conference travel.) |
|
/ok to test 40187dd |
|
I finally have access to my GPU box again, and have ran some initial benchmarks. The goal here was to successfully reproduce the results from the GPURHH repo in a manner fully contained inside cuCollections, and I believe this has been successful. Setup:
Note that the resulting MatchingRate is set relatively small. This needs some explanation: the GPURHH benchmark does independent uniform insertion and retrieval. In cuCo, a different setup is used: first, the system first generates a list of The exact numbers are This makes me think I should benchmark some more instances to get a broader view - I'd be curious what other benchmarking scenarios you'd potentially like to see? (@PointKernel / @sleeepyjack) Otherwise, I think now would be a good time to speak again on Zoom. The current implementation should mostly match what was discussed, with the main caveat that the hard-wire required quite a bit of stuff to be commented out, because either they don't make sense for RHH (different atomic pattern, etc.) or for related reasons. A diff against the non-Robin-Hood |
|
Finally: sorry for many messages - I should have previously wrote but forgot - can I get an /ok to test? |
|
/ok to test 2b658a4 |
|
@aterenin Thanks for the follow-up, and we truly appreciate your contribution here. We’ll take a look at the code and benchmark results and get back to you. Nowadays, with agent-assisted coding, there’s a lot more code to review, and we already have quite a few PRs in the pipeline. |
|
Thanks! No hurry from my end, just let me know, and I'll try my best to be responsive. In the meantime, for some reason it looks like my fork never actually picked up upstream changes, even though I thought I had merged them in. Very strange - this should be fixed now, everything compiles again on my end. Do you mind giving a second /ok to test? |
This PR implements Robin Hood hashing, through introducing a new probing scheme, as per #817. An initial-pass implementation for get and insert, and tests, are done.
The implementation works by adding
if constexprlogic throughout to handle Robin Hood specifics as they come up:insertmethods for Robin Hood vs. others, and dispatch according to table type.Some more details about this question, with an example, are given at the very end of #817.