Skip to content

Commit 5ea74c1

Browse files
committed
add game of life benchmark
1 parent 1758509 commit 5ea74c1

File tree

2 files changed

+24
-0
lines changed

2 files changed

+24
-0
lines changed

rayon-demo/src/life/bench.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,8 @@ fn generations(b: &mut ::test::Bencher) {
99
fn parallel_generations(b: &mut ::test::Bencher) {
1010
b.iter(|| super::parallel_generations(Board::new(200, 200).random(), 100));
1111
}
12+
13+
#[bench]
14+
fn as_parallel_generations(b: &mut ::test::Bencher) {
15+
b.iter(|| super::as_parallel_generations(Board::new(200, 200).random(), 100));
16+
}

rayon-demo/src/life/mod.rs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ use time;
2020

2121
use docopt::Docopt;
2222
use rayon::prelude::*;
23+
use rayon::iter::AsParallel;
2324

2425
#[cfg(test)]
2526
mod bench;
@@ -93,6 +94,15 @@ impl Board {
9394
self.next_board(new_brd)
9495
}
9596

97+
pub fn as_parallel_next_generation(&self) -> Board {
98+
let new_brd = (0..self.len())
99+
.as_parallel()
100+
.map(|cell| self.successor_cell(cell))
101+
.collect();
102+
103+
self.next_board(new_brd)
104+
}
105+
96106
fn cell_live(&self, x: usize, y: usize) -> bool {
97107
!(x >= self.cols || y >= self.rows) && self.board[y * self.cols + x]
98108
}
@@ -145,6 +155,11 @@ fn parallel_generations(board: Board, gens: usize) {
145155
for _ in 0..gens { brd = brd.parallel_next_generation(); }
146156
}
147157

158+
fn as_parallel_generations(board: Board, gens: usize) {
159+
let mut brd = board;
160+
for _ in 0..gens { brd = brd.as_parallel_next_generation(); }
161+
}
162+
148163
fn measure(f: fn(Board, usize) -> (), args: &Args) -> u64 {
149164
let (n, gens) = (args.flag_size, args.flag_gens);
150165
let brd = Board::new(n, n).random();
@@ -168,5 +183,9 @@ pub fn main(args: &[String]) {
168183
let parallel = measure(parallel_generations, &args);
169184
println!("parallel: {:10} ns -> {:.2}x speedup", parallel,
170185
serial as f64 / parallel as f64);
186+
187+
let as_parallel = measure(as_parallel_generations, &args);
188+
println!("as_parallel: {:10} ns -> {:.2}x speedup", as_parallel,
189+
serial as f64 / as_parallel as f64);
171190
}
172191
}

0 commit comments

Comments
 (0)