|
| 1 | +#include <ROOT/RBinWithError.hxx> |
1 | 2 | #include <ROOT/RHistEngine.hxx> |
2 | 3 | #include <ROOT/RRegularAxis.hxx> |
3 | 4 | #include <ROOT/RWeight.hxx> |
@@ -147,4 +148,84 @@ BENCHMARK_DEFINE_F(RHistEngine_float_Regular2, FillWeight)(benchmark::State &sta |
147 | 148 | } |
148 | 149 | BENCHMARK_REGISTER_F(RHistEngine_float_Regular2, FillWeight)->Range(0, 32768); |
149 | 150 |
|
| 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 | + |
150 | 231 | BENCHMARK_MAIN(); |
0 commit comments