Skip to content

Commit fa30cc1

Browse files
committed
bench: add rand_dist int benchmarks
1 parent 7826ccf commit fa30cc1

File tree

1 file changed

+51
-12
lines changed

1 file changed

+51
-12
lines changed

test/b-rand_dist.cpp

Lines changed: 51 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,17 @@ struct mean {
2222
}
2323
};
2424

25+
template <typename Rng, typename Dist>
26+
void bench_int_dist(picobench::state& s) {
27+
Rng rng(9857);
28+
Dist dist(-100, 100);
29+
mean m;
30+
for (uauto _ : s) {
31+
m += dist(rng);
32+
}
33+
s.set_result(m.get(10));
34+
}
35+
2536
template <typename Rng, typename Dist>
2637
void bench_real_dist(picobench::state& s) {
2738
Rng rng(12345);
@@ -55,25 +66,53 @@ void bench_std_real_dist_01(picobench::state& s) {
5566
}
5667

5768
template <typename T>
58-
struct dist {
59-
using fast = itlib::fast_uniform_real_distribution<T>;
60-
using std = std::uniform_real_distribution<T>;
61-
};
69+
using int_itlib = itlib::uniform_int_distribution<T>;
70+
template <typename T>
71+
using int_std = std::uniform_int_distribution<T>;
72+
template <typename T>
73+
using real_fast = itlib::fast_uniform_real_distribution<T>;
74+
template <typename T>
75+
using real_std = std::uniform_real_distribution<T>;
76+
77+
template <typename Rng>
78+
void add_int_benchmarks(picobench::local_runner& r) {
79+
r.add_benchmark("itlib int32", bench_int_dist<Rng, int_itlib<int32_t>>);
80+
r.add_benchmark("std int32", bench_int_dist<Rng, int_std<int32_t>>);
81+
r.add_benchmark("itlib int64", bench_int_dist<Rng, int_itlib<int64_t>>);
82+
r.add_benchmark("std int64", bench_int_dist<Rng, int_std<int64_t>>);
83+
}
84+
85+
template <typename Rng>
86+
void add_real_benchmarks(picobench::local_runner& r) {
87+
r.add_benchmark("fast float", bench_real_dist<Rng, real_fast<float>>);
88+
r.add_benchmark("fast double", bench_real_dist<Rng, real_fast<double>>);
89+
r.add_benchmark("std float", bench_real_dist<Rng, real_std<float>>);
90+
r.add_benchmark("std double", bench_real_dist<Rng, real_std<double>>);
91+
}
6292

6393
int main(int argc, char* argv[]) {
6494
picobench::local_runner r;
6595

96+
r.set_suite("int dist mt19937");
97+
add_int_benchmarks<std::mt19937>(r);
98+
99+
r.set_suite("int dist minstd_rand");
100+
add_int_benchmarks<std::minstd_rand>(r);
101+
66102
r.set_suite("real dist mt19937");
67-
r.add_benchmark("fast float", bench_real_dist<std::mt19937, dist<float>::fast>);
68-
r.add_benchmark("fast double", bench_real_dist<std::mt19937, dist<double>::fast>);
69-
r.add_benchmark("std float", bench_real_dist<std::mt19937, dist<float>::std>);
70-
r.add_benchmark("std double", bench_real_dist<std::mt19937, dist<double>::std>);
103+
add_real_benchmarks<std::mt19937>(r);
71104

72105
r.set_suite("real dist mt19937 01");
73-
r.add_benchmark("fast float 01", bench_real_dist_01<std::mt19937, dist<float>::fast>);
74-
r.add_benchmark("fast double 01", bench_real_dist_01<std::mt19937, dist<double>::fast>);
75-
r.add_benchmark("std float 01", bench_std_real_dist_01<std::mt19937, float>);
76-
r.add_benchmark("std double 01", bench_std_real_dist_01<std::mt19937, double>);
106+
r.add_benchmark("fast float", bench_real_dist_01<std::mt19937, real_fast<float>>);
107+
r.add_benchmark("fast double", bench_real_dist_01<std::mt19937, real_fast<double>>);
108+
r.add_benchmark("std float", bench_std_real_dist_01<std::mt19937, float>);
109+
r.add_benchmark("std double", bench_std_real_dist_01<std::mt19937, double>);
110+
111+
r.set_suite("real dist mt19937_64");
112+
add_real_benchmarks<std::mt19937_64>(r);
113+
114+
r.set_suite("real dist minstd_rand");
115+
add_real_benchmarks<std::minstd_rand>(r);
77116

78117
r.set_compare_results_across_samples(true);
79118
r.set_compare_results_across_benchmarks(true);

0 commit comments

Comments
 (0)