diff --git a/Cargo.lock b/Cargo.lock index c4a223d..4b6b0ef 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -608,6 +608,10 @@ checksum = "1d51f5df5af43ab3f1360b429fa5e0152ac5ce8c0bd6485cae490332e96846a8" [[package]] name = "sobol" version = "0.1.0" +dependencies = [ + "bencher", + "rand 0.6.5", +] [[package]] name = "spectral_upsampling" diff --git a/sub_crates/sobol/Cargo.toml b/sub_crates/sobol/Cargo.toml index a60eb43..de3b1d1 100644 --- a/sub_crates/sobol/Cargo.toml +++ b/sub_crates/sobol/Cargo.toml @@ -9,3 +9,11 @@ build = "build.rs" [lib] name = "sobol" path = "src/lib.rs" + +[dev-dependencies] +rand = "0.6" +bencher = "0.1.5" + +[[bench]] +name = "bench" +harness = false \ No newline at end of file diff --git a/sub_crates/sobol/benches/bench.rs b/sub_crates/sobol/benches/bench.rs new file mode 100644 index 0000000..b2f752f --- /dev/null +++ b/sub_crates/sobol/benches/bench.rs @@ -0,0 +1,34 @@ +use bencher::{benchmark_group, benchmark_main, black_box, Bencher}; +use rand::{rngs::SmallRng, FromEntropy, Rng}; +use sobol::sample_4d; + +//---- + +fn gen_1000_samples(bench: &mut Bencher) { + bench.iter(|| { + for i in 0..1000u32 { + black_box(sample_4d(i, 0, 1234567890)); + } + }); +} + +fn gen_1000_samples_incoherent(bench: &mut Bencher) { + let mut rng = SmallRng::from_entropy(); + bench.iter(|| { + let s = rng.gen::(); + let d = rng.gen::(); + let seed = rng.gen::(); + for i in 0..1000u32 { + black_box(sample_4d( + s.wrapping_add(i).wrapping_mul(512), + d.wrapping_add(i).wrapping_mul(97) % 32, + seed, + )); + } + }); +} + +//---- + +benchmark_group!(benches, gen_1000_samples, gen_1000_samples_incoherent,); +benchmark_main!(benches);