Created
December 21, 2017 00:32
-
-
Save AndrewGaspar/6d02ea6379df642362ca8a60cd692e29 to your computer and use it in GitHub Desktop.
Vector Add Benchmarks
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![feature(test)] | |
extern crate test; | |
#[macro_use] extern crate itertools; | |
use test::Bencher; | |
const VEC_SIZE: usize = 10000; | |
#[bench] | |
fn bench_vector_add(bencher: &mut Bencher) { | |
let a = vec![0f64; VEC_SIZE]; | |
let b = vec![0f64; VEC_SIZE]; | |
let mut c = vec![0f64; VEC_SIZE]; | |
bencher.iter(|| { | |
for x in 0..VEC_SIZE { | |
c[x] = a[x] + b[x]; | |
} | |
}); | |
} | |
#[bench] | |
fn bench_vector_add_slice(bencher: &mut Bencher) { | |
let a = vec![0f64; VEC_SIZE]; | |
let b = vec![0f64; VEC_SIZE]; | |
let mut c = vec![0f64; VEC_SIZE]; | |
bencher.iter(|| { | |
let a = &a[0..VEC_SIZE]; | |
let b = &b[0..VEC_SIZE]; | |
let c = &mut c[0..VEC_SIZE]; | |
for x in 0..VEC_SIZE { | |
c[x] = a[x] + b[x]; | |
} | |
}); | |
} | |
#[bench] | |
fn bench_vector_add_unsafe(bencher: &mut Bencher) { | |
let a = vec![0f64; VEC_SIZE]; | |
let b = vec![0f64; VEC_SIZE]; | |
let mut c = vec![0f64; VEC_SIZE]; | |
bencher.iter(|| { | |
for x in 0..VEC_SIZE { | |
unsafe { | |
*c.get_unchecked_mut(x) = *a.get_unchecked(x) + *b.get_unchecked(x); | |
} | |
} | |
}); | |
} | |
#[bench] | |
fn bench_vector_add_zip(bencher: &mut Bencher) { | |
let a = vec![0f64; VEC_SIZE]; | |
let b = vec![0f64; VEC_SIZE]; | |
let mut c = vec![0f64; VEC_SIZE]; | |
bencher.iter(|| { | |
for (&a, &b, c) in izip!(&a, &b, &mut c) { | |
*c = a + b; | |
} | |
}); | |
} | |
#[bench] | |
fn bench_vector_add_zip_collect(bencher: &mut Bencher) { | |
let a = vec![0f64; VEC_SIZE]; | |
let b = vec![0f64; VEC_SIZE]; | |
bencher.iter(|| { | |
let _c: Vec<f64> = a.iter().zip(&b).map(|(a, b)| a + b).collect(); | |
}); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment