-
Notifications
You must be signed in to change notification settings - Fork 12
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
Rebase on rayon-1.2.0 and rayon-core-1.6.0 #3
Conversation
I think you could drop your main handler and scoped pools in favor of https://docs.rs/rayon/1.1.0/rayon/struct.ThreadPoolBuilder.html#method.build_scoped |
I've now rebased this on rayon 1.2. I also dropped the |
The comparison to rayon-rs master may be more useful: |
@Zoxc, can you review this? It would be nice to land in rustc, if only for the dependency updates. |
These adaptors consume may many elements before deferring to a base folder's fullness checks, and so they need to be performed manually. For the `filter`s, there's no way to do it manually (rayon-rs#632), so the specialisations just have to be removed. For `fold` and `find_any` this can be done with a `take_while`. This extends the octillion tests to confirm this behaviour. This makes a program like the following slightly slower compared to the direct `consume_iter` without a check, but it's still faster than the non-specialized form. ``` extern crate test; extern crate rayon; use rayon::prelude::*; fn main() { let count = (0..std::u32::MAX) .into_par_iter() .map(test::black_box) .find_any(|_| test::black_box(false)); println!("{:?}", count); } ``` ``` $ hyperfine ./find-original ./find-no-check ./find-check Benchmark #1: ./find-original Time (mean ± σ): 627.6 ms ± 25.7 ms [User: 7.130 s, System: 0.014 s] Range (min … max): 588.4 ms … 656.4 ms 10 runs Benchmark #2: ./find-no-check Time (mean ± σ): 481.5 ms ± 10.8 ms [User: 5.415 s, System: 0.013 s] Range (min … max): 468.9 ms … 498.2 ms 10 runs Benchmark #3: ./find-check Time (mean ± σ): 562.3 ms ± 11.8 ms [User: 6.363 s, System: 0.013 s] Range (min … max): 542.5 ms … 578.2 ms 10 runs ``` (find-original = without specialization, find-no-check = custom `consume_iter` without `take_while`, find-check = this commit)
Rebase rustc-rayon on rayon-1.2 See also rust-lang/rustc-rayon#3
It still needs new crates.io release to make it's way to Rust. |
@mati865 I think this did make it into rustc-rayon 0.3.0 -- in fact it was the reason for that release. |
That's on the |
This can't be directly merged, since I rebased, but I hope it's useful anyway.
r? @Zoxc