Update benchmark
This commit is contained in:
parent
4636e982ab
commit
182d349c23
3 changed files with 83 additions and 34 deletions
|
@ -6,6 +6,7 @@ edition = "2018"
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
criterion = "0.3.1"
|
criterion = "0.3.1"
|
||||||
|
rand="0.7.3"
|
||||||
|
|
||||||
[[bench]]
|
[[bench]]
|
||||||
name = "benches"
|
name = "benches"
|
||||||
|
|
|
@ -1,54 +1,102 @@
|
||||||
use criterion::{black_box, criterion_group, criterion_main, Criterion};
|
use criterion::{criterion_group, criterion_main, Criterion};
|
||||||
|
use grid::grid;
|
||||||
use grid::Grid;
|
use grid::Grid;
|
||||||
|
use rand::Rng;
|
||||||
|
|
||||||
fn init_vec_vec(size: usize) -> Vec<Vec<u32>> {
|
const SIZE: usize = 1000;
|
||||||
vec![vec![0; size]; size]
|
|
||||||
|
fn init_vec_vec() -> Vec<Vec<u32>> {
|
||||||
|
vec![vec![0; SIZE]; SIZE]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_vec_flat(size: usize) -> Vec<u32> {
|
fn init_vec_flat() -> Vec<u32> {
|
||||||
vec![0; size * size]
|
vec![0; SIZE * SIZE]
|
||||||
}
|
}
|
||||||
|
|
||||||
fn init_grid(size: usize) -> Grid<u32> {
|
fn init_grid() -> Grid<u32> {
|
||||||
Grid::init(size, size, 0)
|
Grid::init(SIZE, SIZE, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
fn criterion_benchmark(c: &mut Criterion) {
|
fn criterion_benchmark(c: &mut Criterion) {
|
||||||
|
let mut rng = rand::thread_rng();
|
||||||
|
let mut rand = || rng.gen_range(0, SIZE);
|
||||||
|
|
||||||
|
let mut rng_u32 = rand::thread_rng();
|
||||||
|
let mut rand_u32 = || rng_u32.gen::<u32>();
|
||||||
|
|
||||||
|
// Init macro
|
||||||
|
c.bench_function("Macro init vec vec", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
vec![
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
vec![0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
c.bench_function("Macro init vec flat", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
vec![
|
||||||
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7,
|
||||||
|
8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5,
|
||||||
|
6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3,
|
||||||
|
4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,
|
||||||
|
]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
c.bench_function("Macro init grid", |b| {
|
||||||
|
b.iter(|| {
|
||||||
|
grid![[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]
|
||||||
|
[0,1,2,3,4,5,6,7,8,9]]
|
||||||
|
})
|
||||||
|
});
|
||||||
|
|
||||||
// New
|
// New
|
||||||
c.bench_function("Init vec vec 10x10", |b| {
|
c.bench_function("Init vec vec", |b| b.iter(|| init_vec_vec()));
|
||||||
b.iter(|| init_vec_vec(black_box(10)))
|
c.bench_function("Init vec flat", |b| b.iter(|| init_vec_flat()));
|
||||||
});
|
c.bench_function("Init grid", |b| b.iter(|| init_grid()));
|
||||||
c.bench_function("Init vec flat 10x10", |b| {
|
|
||||||
b.iter(|| init_vec_flat(black_box(10)))
|
|
||||||
});
|
|
||||||
c.bench_function("Init grid 10x10", |b| b.iter(|| init_grid(black_box(10))));
|
|
||||||
|
|
||||||
// Get
|
// Get
|
||||||
c.bench_function("Idx vec vec 10x10", |b| {
|
c.bench_function("Idx vec vec", |b| {
|
||||||
let vec_vec = init_vec_vec(10);
|
let vec_vec = init_vec_vec();
|
||||||
b.iter(|| vec_vec[black_box(2)][black_box(3)])
|
b.iter(|| vec_vec[rand()][rand()])
|
||||||
});
|
});
|
||||||
c.bench_function("Idx grid 10x10", |b| {
|
c.bench_function("Idx grid", |b| {
|
||||||
let grid = init_grid(10);
|
let grid = init_grid();
|
||||||
b.iter(|| grid[black_box(2)][black_box(3)])
|
b.iter(|| grid[rand()][rand()])
|
||||||
});
|
});
|
||||||
c.bench_function("Get_fn vec vec 10x10", |b| {
|
c.bench_function("Get_fn vec vec", |b| {
|
||||||
let vec_vec = init_vec_vec(10);
|
let vec_vec = init_vec_vec();
|
||||||
b.iter(|| vec_vec.get(black_box(2)).unwrap().get(black_box(3)))
|
b.iter(|| vec_vec.get(rand()).unwrap().get(rand()))
|
||||||
});
|
});
|
||||||
c.bench_function("Get_fn grid 10x10", |b| {
|
c.bench_function("Get_fn grid", |b| {
|
||||||
let grid = init_grid(10);
|
let grid = init_grid();
|
||||||
b.iter(|| grid.get(black_box(2), black_box(3)))
|
b.iter(|| grid.get(rand(), rand()))
|
||||||
});
|
});
|
||||||
|
|
||||||
//Set
|
//Set
|
||||||
c.bench_function("Set vec vec 10x10", |b| {
|
c.bench_function("Set vec vec", |b| {
|
||||||
let mut vec_vec = init_vec_vec(10);
|
let mut vec_vec = init_vec_vec();
|
||||||
b.iter(|| vec_vec[black_box(2)][black_box(3)] = 2)
|
b.iter(|| vec_vec[rand()][rand()] = rand_u32())
|
||||||
});
|
});
|
||||||
c.bench_function("Set gird 10x10", |b| {
|
c.bench_function("Set gird", |b| {
|
||||||
let mut gird = init_grid(10);
|
let mut gird = init_grid();
|
||||||
b.iter(|| gird[black_box(2)][black_box(3)] = 2)
|
b.iter(|| gird[rand()][rand()] = rand_u32())
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -132,8 +132,8 @@ impl<T: Clone> Grid<T> {
|
||||||
/// Returns None if an element beyond the grid bounds is tried to be accessed.
|
/// Returns None if an element beyond the grid bounds is tried to be accessed.
|
||||||
pub fn get(&self, row: usize, col: usize) -> Option<&T> {
|
pub fn get(&self, row: usize, col: usize) -> Option<&T> {
|
||||||
if row < self.rows && col < self.cols() {
|
if row < self.rows && col < self.cols() {
|
||||||
//unsafe { Some(&self.index(row).get_unchecked(col)) }
|
unsafe { Some(&self.data.get_unchecked(row * self.cols() + col)) }
|
||||||
Some(&self.data[row * self.cols() + col])
|
//Some(&self.data.get_unchecked(row * self.cols() + col))
|
||||||
} else {
|
} else {
|
||||||
None
|
None
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue