Skip to content

Commit 8429baa

Browse files
committed
[hist] Add microbenchmarks for RHistEngine<RBinWithError>
1 parent 63f1469 commit 8429baa

File tree

1 file changed

+81
-0
lines changed

1 file changed

+81
-0
lines changed

hist/histv7/benchmark/hist_benchmark_engine.cxx

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
#include <ROOT/RBinWithError.hxx>
12
#include <ROOT/RHistEngine.hxx>
23
#include <ROOT/RRegularAxis.hxx>
34
#include <ROOT/RWeight.hxx>
@@ -147,4 +148,84 @@ BENCHMARK_DEFINE_F(RHistEngine_float_Regular2, FillWeight)(benchmark::State &sta
147148
}
148149
BENCHMARK_REGISTER_F(RHistEngine_float_Regular2, FillWeight)->Range(0, 32768);
149150

151+
struct RHistEngine_RBinWithError_Regular1 : public benchmark::Fixture {
152+
// The objects are stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
153+
// advantage of the (constant) constructor parameters.
154+
ROOT::Experimental::RRegularAxis axis{20, 0.0, 1.0};
155+
ROOT::Experimental::RHistEngine<ROOT::Experimental::RBinWithError> engine{{axis}};
156+
std::vector<double> fNumbers;
157+
158+
// Avoid GCC warning
159+
using benchmark::Fixture::SetUp;
160+
void SetUp(benchmark::State &state) final
161+
{
162+
std::mt19937 gen;
163+
std::uniform_real_distribution<> dis;
164+
fNumbers.resize(state.range(0));
165+
for (std::size_t i = 0; i < fNumbers.size(); i++) {
166+
fNumbers[i] = dis(gen);
167+
}
168+
}
169+
};
170+
171+
BENCHMARK_DEFINE_F(RHistEngine_RBinWithError_Regular1, Fill)(benchmark::State &state)
172+
{
173+
for (auto _ : state) {
174+
for (double number : fNumbers) {
175+
engine.Fill(number);
176+
}
177+
}
178+
}
179+
BENCHMARK_REGISTER_F(RHistEngine_RBinWithError_Regular1, Fill)->Range(0, 32768);
180+
181+
BENCHMARK_DEFINE_F(RHistEngine_RBinWithError_Regular1, FillWeight)(benchmark::State &state)
182+
{
183+
for (auto _ : state) {
184+
for (double number : fNumbers) {
185+
engine.Fill(number, ROOT::Experimental::RWeight(0.8));
186+
}
187+
}
188+
}
189+
BENCHMARK_REGISTER_F(RHistEngine_RBinWithError_Regular1, FillWeight)->Range(0, 32768);
190+
191+
struct RHistEngine_RBinWithError_Regular2 : public benchmark::Fixture {
192+
// The objects are stored and constructed in the fixture to avoid compiler optimizations in the benchmark body taking
193+
// advantage of the (constant) constructor parameters.
194+
ROOT::Experimental::RRegularAxis axis{20, 0.0, 1.0};
195+
ROOT::Experimental::RHistEngine<ROOT::Experimental::RBinWithError> engine{{axis, axis}};
196+
std::vector<double> fNumbers;
197+
198+
// Avoid GCC warning
199+
using benchmark::Fixture::SetUp;
200+
void SetUp(benchmark::State &state) final
201+
{
202+
std::mt19937 gen;
203+
std::uniform_real_distribution<> dis;
204+
fNumbers.resize(2 * state.range(0));
205+
for (std::size_t i = 0; i < fNumbers.size(); i++) {
206+
fNumbers[i] = dis(gen);
207+
}
208+
}
209+
};
210+
211+
BENCHMARK_DEFINE_F(RHistEngine_RBinWithError_Regular2, Fill)(benchmark::State &state)
212+
{
213+
for (auto _ : state) {
214+
for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
215+
engine.Fill(fNumbers[i], fNumbers[i + 1]);
216+
}
217+
}
218+
}
219+
BENCHMARK_REGISTER_F(RHistEngine_RBinWithError_Regular2, Fill)->Range(0, 32768);
220+
221+
BENCHMARK_DEFINE_F(RHistEngine_RBinWithError_Regular2, FillWeight)(benchmark::State &state)
222+
{
223+
for (auto _ : state) {
224+
for (std::size_t i = 0; i < fNumbers.size(); i += 2) {
225+
engine.Fill(fNumbers[i], fNumbers[i + 1], ROOT::Experimental::RWeight(0.8));
226+
}
227+
}
228+
}
229+
BENCHMARK_REGISTER_F(RHistEngine_RBinWithError_Regular2, FillWeight)->Range(0, 32768);
230+
150231
BENCHMARK_MAIN();

0 commit comments

Comments
 (0)