Skip to content

Instantly share code, notes, and snippets.

@fearofcode
Created October 28, 2018 20:47
Show Gist options
  • Save fearofcode/8aebbe2ce45be1107001947fc20fa1f5 to your computer and use it in GitHub Desktop.
Save fearofcode/8aebbe2ce45be1107001947fc20fa1f5 to your computer and use it in GitHub Desktop.
Simple embarassingly parallel Rayon example
/* sample output (on an 8 core machine):
time elapsed (parallel): 732.39394ms
999: false
time elapsed (serial): 5.857433675s
999: false
5.857433675 seconds / 732.39394 ms = 7.99765448 ~= 8
*/
use rayon::prelude::*;
use std::thread::sleep;
use std::time::{Duration, Instant};
fn main() {
const SZ: usize = 1000;
let mut v = vec![0usize; SZ];
let mut result = vec![false; SZ];
let mut start = Instant::now();
v.par_iter_mut().enumerate().zip_eq(result.par_iter_mut()).for_each(|((i, x), r)| {
sleep(Duration::from_millis(5));
*x = i;
*r = *x % 2 == 0;
});
let mut elapsed = start.elapsed();
println!("time elapsed (parallel): {:?}", elapsed);
println!("{}: {}", v.last().unwrap(), result.last().unwrap());
v = vec![0usize; SZ];
result = vec![false; SZ];
start = Instant::now();
v.iter_mut().enumerate().zip(result.iter_mut()).for_each(|((i, x), r)| {
sleep(Duration::from_millis(5));
*x = i;
*r = *x % 2 == 0;
});
elapsed = start.elapsed();
println!("time elapsed (serial): {:?}", elapsed);
println!("{}: {}", v.last().unwrap(), result.last().unwrap());
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment