simple_parallel 0.3.0

Straight-forward functions and types for basic data parallel operations, including parallel maps, for loops and thread pools.
#![cfg(feature = "unstable")]
#![feature(test)]
extern crate test;
extern crate crossbeam;
extern crate simple_parallel;

fn expensive(x: u64) -> f64 {
    (x as f64)
        .sin().exp().cos().abs().ln()
        .sin().exp().cos().abs().ln()
        .sin().exp().cos().abs().ln()
        .sin().exp().cos().abs().ln()
}

const TOP: u64 = 100;

#[bench]
fn naive(b: &mut test::Bencher) {
    b.iter(|| {
        (0..TOP).map(expensive).collect::<Vec<_>>()
    })
}

#[bench]
fn pool(b: &mut test::Bencher) {
    let mut pool = simple_parallel::Pool::new(4);
    b.iter(|| {
        crossbeam::scope(|scope| {
            pool.map(scope, 0..TOP, expensive).collect::<Vec<_>>()
        })
    })
}
#[bench]
fn nopool(b: &mut test::Bencher) {
    b.iter(|| {
        crossbeam::scope(|scope| {
            simple_parallel::map(scope, 0..TOP, expensive).collect::<Vec<_>>()
        })
    })
}