Logo ROOT   6.14/05
Reference Guide
perfcomp.cxx
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_v7
3 ///
4 /// \macro_code
5 ///
6 /// \date 2015-07-08
7 /// \warning This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback
8 /// is welcome!
9 /// \author Axel Naumann <axel@cern.ch>
10 
11 /*************************************************************************
12  * Copyright (C) 1995-2015, Rene Brun and Fons Rademakers. *
13  * All rights reserved. *
14  * *
15  * For the licensing terms see $ROOTSYS/LICENSE. *
16  * For the list of contributors see $ROOTSYS/README/CREDITS. *
17  *************************************************************************/
18 
19 #include "ROOT/THist.hxx"
20 #include "ROOT/TFit.hxx"
22 
23 #include "TH2.h"
24 
25 #include <chrono>
26 #include <iostream>
27 #include <type_traits>
28 
29 using namespace ROOT;
30 
31 long createNewII(int count)
32 {
33  long ret = 1;
34  for (int i = 0; i < count; ++i) {
35  Experimental::TH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
36  ret ^= (long)&hist;
37  }
38  return ret;
39 }
40 
41 #define BINSOLD \
42  static const int nBinsX = 4; \
43  double x[nBinsX] = {0., 0.1, 0.3, 1.}; \
44  static const int nBinsY = 5; \
45  double y[nBinsY] = {0., 1., 2., 3., 10.}
46 
47 #define DECLOLD TH2D hist("a", "a hist", nBinsX - 1, x, nBinsY - 1, y)
48 
49 #define OLD \
50  BINSOLD; \
51  DECLOLD
52 
53 long createOldII(int count)
54 {
55  BINSOLD;
56  long ret = 1;
57  for (int i = 0; i < count; ++i) {
58  DECLOLD;
59  ret ^= (long)&hist;
60  }
61  return ret;
62 }
63 
64 long fillNewII(int count)
65 {
66  Experimental::TH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
67  for (int i = 0; i < count; ++i)
68  hist.Fill({0.611, 0.611});
69  return hist.GetNDim();
70 }
71 
72 long fillOldII(int count)
73 {
74  OLD;
75  for (int i = 0; i < count; ++i)
76  hist.Fill(0.611, 0.611);
77  return (long)hist.GetEntries();
78 }
79 
80 long fillNII(int count)
81 {
82  Experimental::TH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
83  std::vector<Experimental::Hist::TCoordArray<2>> v(count);
84  for (int i = 0; i < count; ++i)
85  v[i] = {0.611, 0.611};
86  hist.FillN(v);
87  return hist.GetNDim();
88 }
89 
90 long fillBufferedOldII(int count)
91 {
92  OLD;
93  hist.SetBuffer(TH1::GetDefaultBufferSize());
94  for (int i = 0; i < count; ++i)
95  hist.Fill(0.611, 0.611);
96  return (long)hist.GetEntries();
97 }
98 
99 long fillBufferedNewII(int count)
100 {
101  Experimental::TH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
103  for (int i = 0; i < count; ++i)
104  filler.Fill({0.611, 0.611});
105  return hist.GetNDim();
106 }
107 
108 // EQUIDISTANT
109 
110 long createNewEE(int count)
111 {
112  long ret = 1;
113  for (int i = 0; i < count; ++i) {
114  Experimental::TH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
115  ret ^= (long)&hist;
116  }
117  return ret;
118 }
119 
120 long createOldEE(int count)
121 {
122  long ret = 1;
123  for (int i = 0; i < count; ++i) {
124  TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
125  ret ^= (long)&hist;
126  }
127  return ret;
128 }
129 
130 long fillNewEE(int count)
131 {
132  Experimental::TH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
133  for (int i = 0; i < count; ++i)
134  hist.Fill({0.611, 0.611});
135  return hist.GetNDim();
136 }
137 
138 long fillOldEE(int count)
139 {
140  TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
141  for (int i = 0; i < count; ++i)
142  hist.Fill(0.611, 0.611);
143  return (long)hist.GetEntries();
144 }
145 
146 long fillNEE(int count)
147 {
148  Experimental::TH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
149  std::vector<Experimental::Hist::TCoordArray<2>> v(count);
150  for (int i = 0; i < count; ++i)
151  v[i] = {0.611, 0.611};
152  hist.FillN(v);
153  return hist.GetNDim();
154 }
155 
156 long fillBufferedOldEE(int count)
157 {
158  TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
159  hist.SetBuffer(TH1::GetDefaultBufferSize());
160  for (int i = 0; i < count; ++i)
161  hist.Fill(0.611, 0.611);
162  return (long)hist.GetEntries();
163 }
164 
165 long fillBufferedNewEE(int count)
166 {
167  Experimental::TH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
169  for (int i = 0; i < count; ++i)
170  filler.Fill({0.611, 0.611});
171  return hist.GetNDim();
172 }
173 
174 using timefunc_t = std::add_pointer_t<long(int)>;
175 
176 void time1(timefunc_t run, int count, const std::string &name)
177 {
178  using namespace std::chrono;
179  auto start = high_resolution_clock::now();
180  run(count);
181  auto end = high_resolution_clock::now();
182  duration<double> time_span = duration_cast<duration<double>>(end - start);
183 
184  std::cout << count << " * " << name << ": " << time_span.count() << "seconds \n";
185 }
186 
187 void time(timefunc_t r6, timefunc_t r7, int count, const std::string &name)
188 {
189  time1(r6, count, name + " (ROOT6)");
190  time1(r7, count, name + " (ROOT7)");
191 }
192 
193 void perfcomp()
194 {
195  int factor = 1000000;
196  // factor = 1; // debug, fast!
197  time(createOldII, createNewII, factor, "create 2D hists [II]");
198  time(createOldEE, createNewEE, factor, "create 2D hists [EE]");
199  time(fillOldII, fillNewII, 100 * factor, "2D fills [II]");
200  time(fillOldEE, fillNewEE, 100 * factor, "2D fills [EE]");
201  time(fillBufferedOldII, fillBufferedNewII, 100 * factor, "2D fills (buffered) [II]");
202  time(fillBufferedOldEE, fillBufferedNewEE, 100 * factor, "2D fills (buffered) [EE]");
203  return 0;
204 }
Namespace for new ROOT classes and functions.
Definition: StringConv.hxx:21
SVector< double, 2 > v
Definition: Dict.h:5
Histogram class for histograms with DIMENSIONS dimensions, where each bin count is stored by a value ...
Definition: THist.hxx:33
static Int_t GetDefaultBufferSize()
Static function return the default buffer size for automatic histograms the parameter fgBufferSize ma...
Definition: TH1.cxx:4168
void Fill(const CoordArray_t &x, Weight_t weight=(Weight_t) 1) noexcept
Add weight to the bin containing coordinate x.
Definition: THist.hxx:138
char name[80]
Definition: TGX11.cxx:109
2-D histogram with a double per channel (see TH1 documentation)}
Definition: TH2.h:291