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 <random>
7#include <vector>
8
9struct RHistStats1 : public benchmark::Fixture {
10 // The object is stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
11 // advantage of the (constant) constructor parameters.
13 std::vector<double> fNumbers;
14
15 // Avoid GCC warning
16 using benchmark::Fixture::SetUp;
17 void SetUp(benchmark::State &state) final
18 {
19 std::mt19937 gen;
20 std::uniform_real_distribution<> dis;
21 fNumbers.resize(state.range(0));
22 for (std::size_t i = 0; i < fNumbers.size(); i++) {
23 fNumbers[i] = dis(gen);
24 }
25 }
26};
27
28BENCHMARK_DEFINE_F(RHistStats1, Fill)(benchmark::State &state)
29{
30 for (auto _ : state) {
31 for (double number : fNumbers) {
32 stats.Fill(number);
33 }
34 }
35}
37
38BENCHMARK_DEFINE_F(RHistStats1, FillWeight)(benchmark::State &state)
39{
40 for (auto _ : state) {
41 for (double number : fNumbers) {
42 stats.Fill(number, ROOT::Experimental::RWeight(0.8));
43 }
44 }
45}
47
48struct RHistStats2 : public benchmark::Fixture {
49 // The object is stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
50 // advantage of the (constant) constructor parameters.
52 std::vector<double> fNumbers;
53
54 // Avoid GCC warning
55 using benchmark::Fixture::SetUp;
56 void SetUp(benchmark::State &state) final
57 {
58 std::mt19937 gen;
59 std::uniform_real_distribution<> dis;
60 fNumbers.resize(2 * state.range(0));
61 for (std::size_t i = 0; i < fNumbers.size(); i++) {
62 fNumbers[i] = dis(gen);
63 }
64 }
65};
66
67BENCHMARK_DEFINE_F(RHistStats2, Fill)(benchmark::State &state)
68{
69 for (auto _ : state) {
70 for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
71 stats.Fill(fNumbers[i], fNumbers[i + 1]);
72 }
73 }
74}
76
77BENCHMARK_DEFINE_F(RHistStats2, FillWeight)(benchmark::State &state)
78{
79 for (auto _ : state) {
80 for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
81 stats.Fill(fNumbers[i], fNumbers[i + 1], ROOT::Experimental::RWeight(0.8));
82 }
83 }
84}
86
ROOT::Detail::TRangeCast< T, true > TRangeDynCast
TRangeDynCast is an adapter class that allows the typed iteration through a TCollection.
Int_t Fill(Double_t x) override
#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