Skip to content

Commit 8ad1ae9

Browse files
authored
Merge pull request #266 from dhardy/bench
Update benchmark code based on dhardy/master
2 parents d9bde36 + 51b32c1 commit 8ad1ae9

File tree

7 files changed

+100
-123
lines changed

7 files changed

+100
-123
lines changed

benches/bench.rs

Lines changed: 0 additions & 34 deletions
This file was deleted.

benches/distributions.rs

Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
#![feature(test)]
2+
#![cfg_attr(feature = "i128_support", feature(i128_type, i128))]
3+
4+
extern crate test;
5+
extern crate rand;
6+
7+
const RAND_BENCH_N: u64 = 1000;
8+
9+
use std::mem::size_of;
10+
use test::{black_box, Bencher};
11+
12+
use rand::{Rng, NewRng, XorShiftRng};
13+
use rand::distributions::*;
14+
15+
macro_rules! distr {
16+
($fnn:ident, $ty:ty, $distr:expr) => {
17+
#[bench]
18+
fn $fnn(b: &mut Bencher) {
19+
let mut rng = XorShiftRng::new().unwrap();
20+
let distr = $distr;
21+
22+
b.iter(|| {
23+
for _ in 0..::RAND_BENCH_N {
24+
let x: $ty = distr.sample(&mut rng);
25+
black_box(x);
26+
}
27+
});
28+
b.bytes = size_of::<$ty>() as u64 * ::RAND_BENCH_N;
29+
}
30+
}
31+
}
32+
33+
// range
34+
distr!(distr_range_i8, i8, Range::new(20i8, 100));
35+
distr!(distr_range_i16, i16, Range::new(-500i16, 2000));
36+
distr!(distr_range_i32, i32, Range::new(-200_000_000i32, 800_000_000));
37+
distr!(distr_range_i64, i64, Range::new(3i64, 12345678901234));
38+
#[cfg(feature = "i128_support")]
39+
distr!(distr_range_i128, i128, Range::new(-12345678901234i128, 12345678901234567890));
40+
41+
distr!(distr_range_float32, f32, Range::new(2.26f32, 2.319));
42+
distr!(distr_range_float, f64, Range::new(2.26f64, 2.319));
43+
44+
// uniform
45+
distr!(distr_uniform_i8, i8, Uniform);
46+
distr!(distr_uniform_i16, i16, Uniform);
47+
distr!(distr_uniform_i32, i32, Uniform);
48+
distr!(distr_uniform_i64, i64, Uniform);
49+
#[cfg(feature = "i128_support")]
50+
distr!(distr_uniform_i128, i128, Uniform);
51+
52+
distr!(distr_uniform_bool, bool, Uniform);
53+
distr!(distr_uniform_codepoint, char, Uniform);
54+
55+
distr!(distr_uniform01_float32, f32, Uniform);
56+
distr!(distr_closed01_float32, f32, Closed01);
57+
distr!(distr_open01_float32, f32, Open01);
58+
59+
distr!(distr_uniform01_float, f64, Uniform);
60+
distr!(distr_closed01_float, f64, Closed01);
61+
distr!(distr_open01_float, f64, Open01);
62+
63+
// distributions
64+
distr!(distr_exp, f64, Exp::new(2.71828 * 3.14159));
65+
distr!(distr_normal, f64, Normal::new(-2.71828, 3.14159));
66+
distr!(distr_log_normal, f64, LogNormal::new(-2.71828, 3.14159));
67+
distr!(distr_gamma_large_shape, f64, Gamma::new(10., 1.0));
68+
distr!(distr_gamma_small_shape, f64, Gamma::new(0.1, 1.0));
69+
70+
71+
// construct and sample from a range
72+
macro_rules! gen_range_int {
73+
($fnn:ident, $ty:ty, $low:expr, $high:expr) => {
74+
#[bench]
75+
fn $fnn(b: &mut Bencher) {
76+
let mut rng = XorShiftRng::new().unwrap();
77+
let high = $high;
78+
79+
b.iter(|| {
80+
for _ in 0..::RAND_BENCH_N {
81+
let x: $ty = rng.gen_range($low, high);
82+
black_box(x);
83+
black_box(high);
84+
}
85+
});
86+
b.bytes = size_of::<$ty>() as u64 * ::RAND_BENCH_N;
87+
}
88+
}
89+
}
90+
91+
gen_range_int!(gen_range_i8, i8, 20i8, 100);
92+
gen_range_int!(gen_range_i16, i16, -500i16, 2000);
93+
gen_range_int!(gen_range_i32, i32, -200_000_000i32, 800_000_000);
94+
gen_range_int!(gen_range_i64, i64, 3i64, 12345678901234);
95+
#[cfg(feature = "i128_support")]
96+
gen_range_int!(gen_range_i128, i128, -12345678901234i128, 12345678901234567890);

benches/distributions/exponential.rs

Lines changed: 0 additions & 18 deletions
This file was deleted.

benches/distributions/gamma.rs

Lines changed: 0 additions & 31 deletions
This file was deleted.

benches/distributions/mod.rs

Lines changed: 0 additions & 3 deletions
This file was deleted.

benches/distributions/normal.rs

Lines changed: 0 additions & 18 deletions
This file was deleted.

benches/generators.rs

Lines changed: 4 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -52,34 +52,19 @@ macro_rules! gen_uint {
5252
}
5353
}
5454

55-
macro_rules! gen_uint_new {
56-
($fnn:ident, $ty:ty, $gen:ident) => {
57-
#[bench]
58-
fn $fnn(b: &mut Bencher) {
59-
let mut rng = $gen::new().unwrap();
60-
b.iter(|| {
61-
for _ in 0..RAND_BENCH_N {
62-
black_box(rng.gen::<$ty>());
63-
}
64-
});
65-
b.bytes = size_of::<$ty>() as u64 * RAND_BENCH_N;
66-
}
67-
}
68-
}
69-
7055
gen_uint!(gen_u32_xorshift, u32, XorShiftRng);
7156
gen_uint!(gen_u32_hc128, u32, Hc128Rng);
7257
gen_uint!(gen_u32_isaac, u32, IsaacRng);
7358
gen_uint!(gen_u32_isaac64, u32, Isaac64Rng);
74-
gen_uint_new!(gen_u32_std, u32, StdRng);
75-
gen_uint_new!(gen_u32_os, u32, OsRng);
59+
gen_uint!(gen_u32_std, u32, StdRng);
60+
gen_uint!(gen_u32_os, u32, OsRng);
7661

7762
gen_uint!(gen_u64_xorshift, u64, XorShiftRng);
7863
gen_uint!(gen_u64_hc128, u64, Hc128Rng);
7964
gen_uint!(gen_u64_isaac, u64, IsaacRng);
8065
gen_uint!(gen_u64_isaac64, u64, Isaac64Rng);
81-
gen_uint_new!(gen_u64_std, u64, StdRng);
82-
gen_uint_new!(gen_u64_os, u64, OsRng);
66+
gen_uint!(gen_u64_std, u64, StdRng);
67+
gen_uint!(gen_u64_os, u64, OsRng);
8368

8469
// Do not test JitterRng like the others by running it RAND_BENCH_N times per,
8570
// measurement, because it is way too slow. Only run it once.

0 commit comments

Comments
 (0)