Skip to content

Instantly share code, notes, and snippets.

@AndrewGaspar
Created December 21, 2017 00:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save AndrewGaspar/6d02ea6379df642362ca8a60cd692e29 to your computer and use it in GitHub Desktop.
Save AndrewGaspar/6d02ea6379df642362ca8a60cd692e29 to your computer and use it in GitHub Desktop.
Vector Add Benchmarks
#![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