Logo ROOT  
Reference Guide
 
Loading...
Searching...
No Matches
hist_benchmark_stats.cxx
Go to the documentation of this file.
1#include <ROOT/RHistStats.hxx>
2#include <ROOT/RWeight.hxx>
3
4#include <benchmark/benchmark.h>
5
6#include <cstddef>
7#include <random>
8#include <vector>
9
10struct RHistStats1 : public benchmark::Fixture {
11 // The object is stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
12 // advantage of the (constant) constructor parameters.
14 std::vector<double> fNumbers;
15
16 // Avoid GCC warning
17 using benchmark::Fixture::SetUp;
18 void SetUp(benchmark::State &state) final
19 {
20 std::mt19937 gen;
21 std::uniform_real_distribution<> dis;
22 fNumbers.resize(static_cast<std::size_t>(state.range(0)));
23 for (std::size_t i = 0; i < fNumbers.size(); i++) {
24 fNumbers[i] = dis(gen);
25 }
26 }
27};
28
29BENCHMARK_DEFINE_F(RHistStats1, Fill)(benchmark::State &state)
30{
31 for (auto _ : state) {
32 for (double number : fNumbers) {
33 stats.Fill(number);
34 }
35 }
36}
37BENCHMARK_REGISTER_F(RHistStats1, Fill)->Range(0, 32768);
38
39BENCHMARK_DEFINE_F(RHistStats1, FillWeight)(benchmark::State &state)
40{
41 for (auto _ : state) {
42 for (double number : fNumbers) {
43 stats.Fill(number, ROOT::Experimental::RWeight(0.8));
44 }
45 }
46}
48
49struct RHistStats2 : public benchmark::Fixture {
50 // The object is stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
51 // advantage of the (constant) constructor parameters.
53 std::vector<double> fNumbers;
54
55 // Avoid GCC warning
56 using benchmark::Fixture::SetUp;
57 void SetUp(benchmark::State &state) final
58 {
59 std::mt19937 gen;
60 std::uniform_real_distribution<> dis;
61 fNumbers.resize(2 * static_cast<std::size_t>(state.range(0)));
62 for (std::size_t i = 0; i < fNumbers.size(); i++) {
63 fNumbers[i] = dis(gen);
64 }
65 }
66};
67
68BENCHMARK_DEFINE_F(RHistStats2, Fill)(benchmark::State &state)
69{
70 for (auto _ : state) {
71 for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
72 stats.Fill(fNumbers[i], fNumbers[i + 1]);
73 }
74 }
75}
76BENCHMARK_REGISTER_F(RHistStats2, Fill)->Range(0, 32768);
77
78BENCHMARK_DEFINE_F(RHistStats2, FillWeight)(benchmark::State &state)
79{
80 for (auto _ : state) {
81 for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
82 stats.Fill(fNumbers[i], fNumbers[i + 1], ROOT::Experimental::RWeight(0.8));
83 }
84 }
85}
87
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
#define _(A, B)
Definition cfortran.h:108
Histogram statistics of unbinned values.
BENCHMARK_DEFINE_F(RHistStats1, Fill)(benchmark
BENCHMARK_REGISTER_F(RHistStats1, Fill) -> Range(0, 32768)
BENCHMARK_MAIN()
std::vector< double > fNumbers
ROOT::Experimental::RHistStats stats
void SetUp(benchmark::State &state) final
void SetUp(benchmark::State &state) final
std::vector< double > fNumbers
ROOT::Experimental::RHistStats stats
A weight for filling histograms.
Definition RWeight.hxx:17