11#include " ROOT/RVec.hxx"
22#include " benchmark/benchmark.h"
3- #include " rootbench/RBConfig.h"
43
54using namespace ROOT ::VecOps;
65
@@ -11,13 +10,22 @@ static void GetArguments(benchmark::internal::Benchmark* b)
1110 b->Arg (i);
1211}
1312
13+ template <class T >
14+ RVec<T> GenerateSeq (const unsigned int size, const T start = 0 )
15+ {
16+ RVec<T> v (size);
17+ for (auto i = 0u ; i < size; i++)
18+ v[i] = start + i;
19+ return v;
20+ }
21+
1422
1523template <class T >
1624static void RVecAssign (benchmark::State &state)
1725{
1826 const auto size = state.range (0 );
19- RVec <T> v1 (size);
20- RVec <T> v2 ( size);
27+ auto v1 = GenerateSeq <T>(size);
28+ auto v2 = GenerateSeq <T>(size, size);
2129 for (auto _ : state) {
2230 v2 = v1;
2331 benchmark::DoNotOptimize (v2);
@@ -30,8 +38,8 @@ template <class T>
3038static void RVecAdd (benchmark::State &state)
3139{
3240 const auto size = state.range (0 );
33- RVec <T> v1 (size);
34- RVec <T> v2 ( size);
41+ auto v1 = GenerateSeq <T>(size);
42+ auto v2 = GenerateSeq <T>(size, size);
3543 for (auto _ : state) {
3644 benchmark::DoNotOptimize (v1 + v2);
3745 }
@@ -43,8 +51,8 @@ template <class T>
4351static void RVecSquareAddSqrt (benchmark::State &state)
4452{
4553 const auto size = state.range (0 );
46- RVec <T> v1 (size);
47- RVec <T> v2 ( size);
54+ auto v1 = GenerateSeq <T>(size);
55+ auto v2 = GenerateSeq <T>(size, size);
4856 for (auto _ : state) {
4957 benchmark::DoNotOptimize (sqrt (pow (v1, 2 ) + pow (v2, 2 )));
5058 }
@@ -56,10 +64,10 @@ template <class T>
5664static void RVecDeltaR (benchmark::State &state)
5765{
5866 const auto size = state.range (0 );
59- RVec <T> eta1 (size);
60- RVec <T> eta2 (size);
61- RVec <T> phi1 (size);
62- RVec <T> phi2 (size);
67+ auto eta1 = GenerateSeq <T>(size, 0 );
68+ auto eta2 = GenerateSeq <T>(size, 1 );
69+ auto phi1 = GenerateSeq <T>(size, 2 );
70+ auto phi2 = GenerateSeq <T>(size, 3 );
6371 for (auto _ : state) {
6472 benchmark::DoNotOptimize (DeltaR (eta1, eta2, phi1, phi2));
6573 }
@@ -71,10 +79,10 @@ template <class T>
7179static void RVecInvariantMass (benchmark::State &state)
7280{
7381 const auto size = state.range (0 );
74- RVec <T> pt (size);
75- RVec <T> eta (size);
76- RVec <T> phi (size);
77- RVec <T> mass (size);
82+ auto pt = GenerateSeq <T>(size, 0 );
83+ auto eta = GenerateSeq <T>(size, 1 );
84+ auto phi = GenerateSeq <T>(size, 2 );
85+ auto mass = GenerateSeq <T>(size, 3 );
7886 for (auto _ : state) {
7987 benchmark::DoNotOptimize (InvariantMass (pt, eta, phi, mass));
8088 }
@@ -86,31 +94,21 @@ template <class T>
8694static void RVecInvariantMasses (benchmark::State &state)
8795{
8896 const auto size = state.range (0 );
89- RVec <T> pt1 (size);
90- RVec <T> pt2 (size);
91- RVec <T> eta1 (size);
92- RVec <T> eta2 (size);
93- RVec <T> phi1 (size);
94- RVec <T> phi2 (size);
95- RVec <T> mass1 (size);
96- RVec <T> mass2 (size);
97+ auto pt1 = GenerateSeq <T>(size, 0 );
98+ auto eta1 = GenerateSeq <T>(size, 1 );
99+ auto phi1 = GenerateSeq <T>(size, 2 );
100+ auto mass1 = GenerateSeq <T>(size, 3 );
101+ auto pt2 = GenerateSeq <T>(size, 4 );
102+ auto eta2 = GenerateSeq <T>(size, 5 );
103+ auto phi2 = GenerateSeq <T>(size, 6 );
104+ auto mass2 = GenerateSeq <T>(size, 7 );
97105 for (auto _ : state) {
98106 benchmark::DoNotOptimize (InvariantMasses (pt1, eta1, phi1, mass1, pt2, eta2, phi2, mass2));
99107 }
100108}
101109BENCHMARK_TEMPLATE (RVecInvariantMasses, float )->Apply(GetArguments);
102110
103111
104- template <class T >
105- RVec<T> GenerateSeq (const unsigned int size)
106- {
107- RVec<T> v (size);
108- for (auto i = 0u ; i < size; i++)
109- v[i] = i;
110- return v;
111- }
112-
113-
114112template <class T >
115113static void RVecMaskingSimple (benchmark::State &state)
116114{
0 commit comments