implement par_iter_many and par_iter_many_unique #17815
Open
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Objective
Continuation of #16547.
We do not yet have parallel versions of
par_iter_many
andpar_iter_many_unique
. It is currently very painful to try and use parallel iteration over entity lists. Even if a list is not long, each operation might still be very expensive, and worth parallelizing.Plus, it has been requested several times!
Solution
Once again, we implement what we lack!
These parallel iterators collect their input entity list into a
Vec
/UniqueEntityVec
, then chunk that over the available threads, inspired by the originalpar_iter
.Since no order guarantee is given to the caller, we could sort the input list according to
EntityLocation
, but that would likely only be worth it for very large entity lists.There is some duplication which could likely be improved, but I'd like to leave that for a follow-up.