Logo ROOT  
Reference Guide
perfcomp.cxx File Reference

Detailed Description

/*************************************************************************
* Copyright (C) 1995-2015, Rene Brun and Fons Rademakers. *
* All rights reserved. *
* *
* For the licensing terms see $ROOTSYS/LICENSE. *
* For the list of contributors see $ROOTSYS/README/CREDITS. *
*************************************************************************/
#include "ROOT/RHist.hxx"
#include "ROOT/RFit.hxx"
#include "TH2.h"
#include <chrono>
#include <iostream>
#include <type_traits>
using namespace ROOT::Experimental;
long createNewII(int count)
{
long ret = 1;
for (int i = 0; i < count; ++i) {
RH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
ret ^= (long)&hist;
}
return ret;
}
#define BINSOLD \
static const int nBinsX = 4; \
double x[nBinsX] = {0., 0.1, 0.3, 1.}; \
static const int nBinsY = 5; \
double y[nBinsY] = {0., 1., 2., 3., 10.}
#define DECLOLD TH2D hist("a", "a hist", nBinsX - 1, x, nBinsY - 1, y)
#define OLD \
BINSOLD; \
DECLOLD
long createOldII(int count)
{
BINSOLD;
long ret = 1;
for (int i = 0; i < count; ++i) {
DECLOLD;
ret ^= (long)&hist;
}
return ret;
}
long fillNewII(int count)
{
RH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
for (int i = 0; i < count; ++i)
hist.Fill({0.611, 0.611});
return hist.GetNDim();
}
long fillOldII(int count)
{
OLD;
for (int i = 0; i < count; ++i)
hist.Fill(0.611, 0.611);
return (long)hist.GetEntries();
}
long fillNII(int count)
{
RH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
std::vector<Hist::RCoordArray<2>> v(count);
for (int i = 0; i < count; ++i)
v[i] = {0.611, 0.611};
hist.FillN(v);
return hist.GetNDim();
}
long fillBufferedOldII(int count)
{
OLD;
hist.SetBuffer(TH1::GetDefaultBufferSize());
for (int i = 0; i < count; ++i)
hist.Fill(0.611, 0.611);
return (long)hist.GetEntries();
}
long fillBufferedNewII(int count)
{
RH2D hist({{{{0., 0.1, 0.3, 1.}}, {{0., 1., 2., 3., 10.}}}});
for (int i = 0; i < count; ++i)
filler.Fill({0.611, 0.611});
return hist.GetNDim();
}
// EQUIDISTANT
long createNewEE(int count)
{
long ret = 1;
for (int i = 0; i < count; ++i) {
RH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
ret ^= (long)&hist;
}
return ret;
}
long createOldEE(int count)
{
long ret = 1;
for (int i = 0; i < count; ++i) {
TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
ret ^= (long)&hist;
}
return ret;
}
long fillNewEE(int count)
{
RH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
for (int i = 0; i < count; ++i)
hist.Fill({0.611, 0.611});
return hist.GetNDim();
}
long fillOldEE(int count)
{
TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
for (int i = 0; i < count; ++i)
hist.Fill(0.611, 0.611);
return (long)hist.GetEntries();
}
long fillNEE(int count)
{
RH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
std::vector<Hist::RCoordArray<2>> v(count);
for (int i = 0; i < count; ++i)
v[i] = {0.611, 0.611};
hist.FillN(v);
return hist.GetNDim();
}
long fillBufferedOldEE(int count)
{
TH2D hist("a", "a hist", 100, 0., 1., 5, 0., 10.);
hist.SetBuffer(TH1::GetDefaultBufferSize());
for (int i = 0; i < count; ++i)
hist.Fill(0.611, 0.611);
return (long)hist.GetEntries();
}
long fillBufferedNewEE(int count)
{
RH2D hist({{{100, 0., 1.}, {5, 0., 10.}}});
for (int i = 0; i < count; ++i)
filler.Fill({0.611, 0.611});
return hist.GetNDim();
}
using timefunc_t = std::add_pointer_t<long(int)>;
void time1(timefunc_t run, int count, const std::string &name)
{
using namespace std::chrono;
auto start = high_resolution_clock::now();
run(count);
auto end = high_resolution_clock::now();
duration<double> time_span = duration_cast<duration<double>>(end - start);
std::cout << count << " * " << name << ": " << time_span.count() << "seconds \n";
}
void time(timefunc_t r6, timefunc_t r7, int count, const std::string &name)
{
time1(r6, count, name + " (ROOT6)");
time1(r7, count, name + " (ROOT7)");
}
void perfcomp()
{
int factor = 1000000;
// factor = 1; // debug, fast!
time(createOldII, createNewII, factor, "create 2D hists [II]");
time(createOldEE, createNewEE, factor, "create 2D hists [EE]");
time(fillOldII, fillNewII, 100 * factor, "2D fills [II]");
time(fillOldEE, fillNewEE, 100 * factor, "2D fills [EE]");
time(fillBufferedOldII, fillBufferedNewII, 100 * factor, "2D fills (buffered) [II]");
time(fillBufferedOldEE, fillBufferedNewEE, 100 * factor, "2D fills (buffered) [EE]");
}
Date
2015-07-08
Warning
This is part of the ROOT 7 prototype! It will change without notice. It might trigger earthquakes. Feedback is welcome!
Author
Axel Naumann axel@.nosp@m.cern.nosp@m..ch

Definition in file perfcomp.cxx.

RHist.hxx
long
long
Definition: Converters.cxx:858
v
@ v
Definition: rootcling_impl.cxx:3635
ROOT::Experimental::RHist::Fill
void Fill(const CoordArray_t &x, Weight_t weight=(Weight_t) 1) noexcept
Add weight to the bin containing coordinate x.
Definition: RHist.hxx:151
ROOT::Experimental::RHist::GetNDim
static constexpr int GetNDim() noexcept
Number of dimensions of the coordinates.
Definition: RHist.hxx:81
TH2D
2-D histogram with a double per channel (see TH1 documentation)}
Definition: TH2.h:292
TH1::GetDefaultBufferSize
static Int_t GetDefaultBufferSize()
Static function return the default buffer size for automatic histograms the parameter fgBufferSize ma...
Definition: TH1.cxx:4284
TH2.h
ROOT::Experimental::RHist::FillN
void FillN(const std::span< const CoordArray_t > xN, const std::span< const Weight_t > weightN) noexcept
For each coordinate in xN, add weightN[i] to the bin at coordinate xN[i].
Definition: RHist.hxx:156
ROOT::Experimental::RHistBufferedFill
Definition: RHistBufferedFill.hxx:94
name
char name[80]
Definition: TGX11.cxx:110
ROOT::Experimental::RHist::GetEntries
int64_t GetEntries() const noexcept
Get the number of entries this histogram was filled with.
Definition: RHist.hxx:165
ROOT::Experimental::RHist
Definition: RHist.hxx:44
ROOT::Experimental
Definition: RDirectory.hxx:36
RFit.hxx
RHistBufferedFill.hxx