20 #include "RConfigure.h"    61                     fHistType(histtype), fNHists(nhists),
    62                     fNEvents(nevents), fNTries(ntries), fStart(start), fStop(stop),
    63                     fStep(step), fDraw(draw), fDebug(
debug), fDirProofBench(dirproofbench),
    64                     fNodes(nodes), fListPerfPlots(0),
    65                     fCanvas(0), fProfile_perfstat_event(0), fHist_perfstat_event(0),
    66                     fProfile_perfstat_evtmax(0), fNorm_perfstat_evtmax(0),
    67                     fProfile_queryresult_event(0), fNorm_queryresult_event(0), fProfile_cpu_eff(0),
    68                     fProfLegend(0), fNormLegend(0), fName(0)
    71       Error(
"TProofBenchRunCPU", 
"problems validating PROOF session or enabling selector PAR");
    79    if (stop == -1) fStop = fNodes->GetNWorkersCluster();
    81    fListPerfPlots = 
new TList;
   107    Int_t quotient = (stop - start) / step;
   108    Int_t ndiv = quotient + 1;
   110    Double_t ns_max = quotient*step + start + step/2.;
   117       axtitle = 
"Active Workers/Node";
   118       namelab.Form(
"x_%s", 
GetName());
   126    name.
Form(
"Prof_%s_PS_MaxEvts_%s", namelab.Data(), sellab.
Data());
   127    title.
Form(
"Profile %s PerfStat Event - %s", namelab.Data(), sellab.
Data());
   142    name.
Form(
"Prof_%s_PS_Evts_%s", namelab.Data(), sellab.
Data());
   143    title.
Form(
"Profile %s PerfStat Event - %s", namelab.Data(), sellab.
Data());
   157    name.
Form(
"Hist_%s_PS_Evts_%s", namelab.Data(), sellab.
Data());
   158    title.
Form(
"Histogram %s PerfStat Event - %s", namelab.Data(), sellab.
Data());
   171    name.
Form(
"Norm_%s_PS_MaxEvts_%s", namelab.Data(), sellab.
Data());
   172    title.
Form(
"Profile %s Normalized PerfStat Event - %s", namelab.Data(), sellab.
Data());
   187    name.
Form(
"Prof_%s_QR_Evts_%s", namelab.Data(), sellab.
Data());
   188    title.
Form(
"Profile %s QueryResult Event - %s", namelab.Data(), sellab.
Data());
   201    name.
Form(
"Norm_%s_QR_Evts_%s", namelab.Data(), sellab.
Data());
   202    title.
Form(
"Profile %s Normalized QueryResult Event - %s", namelab.Data(), sellab.
Data());
   216    name.
Form(
"Prof_%s_CPU_eff_%s", namelab.Data(), sellab.
Data());
   217    title.
Form(
"Profile %s CPU efficiency - %s", namelab.Data(), sellab.
Data());
   248       Error(
"Run", 
"Proof not set");
   252    nevents = (nevents == -1) ? 
fNEvents : nevents;
   253    start = (start == -1) ? 
fStart : start;
   254    stop = (stop == -1) ? 
fStop : stop;
   255    step = (step == -1) ? 
fStep : step;
   256    ntries = (ntries == -1) ? 
fNTries : ntries;
   257    debug = (debug == -1) ? 
fDebug : debug;
   258    draw = (draw == -1) ? 
fDraw : draw;
   269       if (stop > minnworkersanode) stop = minnworkersanode;
   277 #ifdef R__HAVE_CONFIG   282          Info(
"Run", 
"Uploading '%s' ...", par.
Data());
   284             Error(
"Run", 
"problems uploading '%s' - cannot continue", par.
Data());
   294             Error(
"Run", 
"you should load the class '%s' before running the benchmark", 
fSelName.
Data());
   300                Info(
"Run", 
"Uploading '%s' ...", par.
Data());
   302                   Error(
"Run", 
"problems uploading '%s' - cannot continue", par.
Data());
   305                Info(
"Run", 
"Enabling '%s' ...", par.
Data());
   307                   Error(
"Run", 
"problems enabling '%s' - cannot continue", par.
Data());
   331    TString perfstats_name = 
"PROOF_PerfStats";
   336       Info(
"Run", 
"Running CPU-bound tests; %d ~ %d active worker(s)/node,"   337                   " every %d worker(s)/node.", start, stop, step);
   339       Info(
"Run", 
"Running CPU-bound tests; %d ~ %d active worker(s),"   340                   " every %d worker(s).", start, stop, step);
   348    Double_t ymi = -1., ymx = -1., emx = -1.;
   349    for (
Int_t nactive = start; nactive <= stop; nactive += step) {
   352       Int_t ncoren = (nactive < ncores) ? nactive : ncores;
   358          workers.
Form(
"%dx", nactive);
   364          Error(
"Run", 
"could not activate the requested number of"   365                       " workers/node on the cluster; skipping the test point"   366                       " (%d workers/node)", nactive);
   370       for (
Int_t j = 0; j < ntries; j++) {
   373             Info(
"Run", 
"Running CPU-bound tests with %d active worker(s)/node;"   374                         " trial %d/%d", nactive, j + 1, ntries);
   376             Info(
"Run", 
"Running CPU-bound tests with %d active worker(s);"   377                         " trial %d/%d", nactive, j + 1, ntries);
   382             nevents_all=nevents*nactive*nnodes;
   384             nevents_all=nevents*nactive;
   412             Double_t nert = nx ? pf_eventrate/nactive/nnodes : pf_eventrate/nactive;
   417             if (dy / y1 < 0.2) dy = y1 * 0.2;
   418             if (dy > y1) dy = y1*.999999;
   419             if (ymi < 0.) ymi = y1 - dy;
   422             if (ymx < 0.) ymx = y1 + dy;
   438                TString dirn = nx ? 
"RunCPUx" : 
"RunCPU";
   446                   Warning(
"Run", 
"cannot cd to subdirectory '%s' to store the results!", dirn.
Data());
   453                Warning(
"Run", 
"%s: tree not found", perfstats_name.
Data());
   455                Error(
"Run", 
"PROOF output list is empty!");
   460          const char *drawopt = t ? 
"LSAME" : 
"L";
   463             queryresult->
Print(
"F");
   472             if (qr_eventrate > emx) emx = qr_eventrate;
   477                qr_cpu_eff = queryresult->
GetUsedCPU() / ncoren / qr_proc ;
   479                Printf(
"cpu_eff: %f", qr_cpu_eff);
   489             Double_t nert = nx ? qr_eventrate/nactive/nnodes : qr_eventrate/nactive;
   495             if (dy / y1 < 0.2) dy = y1 * 0.2;
   496             if (dy > y1) dy = y1*.999999;
   497             if (ymi < 0.) ymi = y1 - dy;
   500             if (ymx < 0.) ymx = y1 + dy;
   510             Warning(
"Run", 
"TQueryResult not found!");
   532       TString dirn = nx ? 
"RunCPUx" : 
"RunCPU";
   540          Warning(
"Run", 
"cannot cd to subdirectory '%s' to store the results!", dirn.
Data());
   560       Error(
"FillPerfStatPerfPlots", 
"no perfstat profile found");
   566       Error(
"FillPerfStatPerfPlots", 
"no perfstat histogram found");
   578    for (
Long64_t k=0; k<entries; k++) {
   601    Printf(
"+++ TProofBenchRunCPU +++++++++++++++++++++++++++++++++++++++++");
   618       Printf(
"Performance Canvas: Name = %s Title = %s",
   620    Printf(
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
   639       nside = (nside*nside<nprofiles)?nside+1:nside;
   646    while ((profile=(
TProfile*)(nxt()))){
   668    TString namestem(
"+++undef+++");
   681             namestem = 
"HistAll";
   696       Error(
"SetParameters", 
"proof not set; Doing nothing");
   713       Error(
"DeleteParameters", 
"proof not set; Doing nothing");
 
virtual const char * GetName() const
Returns name of object. 
 
Long64_t GetEntries() const
 
TVirtualPerfStats::EEventType fType
 
const char *const kPROOF_BenchCPUSelPar
 
Abstract base class for PROOF benchmark runs. 
 
virtual void Info(const char *method, const char *msgfmt,...) const
Issue info message. 
 
virtual void SetMaximum(Double_t maximum=-1111)
 
This class displays a legend box (TPaveText) containing several legend entries. 
 
CPU-intensive PROOF benchmark test generates events and fill 1, 2, or 3-D histograms. 
 
Int_t EnablePackage(const char *package, Bool_t notOnClient=kFALSE, TList *workers=0)
Enable specified package. 
 
void Print(Option_t *opt="") const
Print query content. Use opt = "F" for a full listing. 
 
virtual void SetDirectory(TDirectory *dir)
By default when an histogram is created, it is added to the list of histogram objects in the current ...
 
R__EXTERN TStyle * gStyle
 
virtual void SetOwner(Bool_t enable=kTRUE)
Set whether this collection is the owner (enable==true) of its content. 
 
virtual void Draw(Option_t *option="")
Draw this legend with its current attributes. 
 
void SetParameter(const char *par, const char *value)
Set input list parameter. 
 
Set of tools to analyse the performance tree. 
 
TDatime GetStartTime() const
 
TVirtualPad * cd(Int_t subpadnumber=0)
Set current canvas & pad. 
 
TList * GetOutputList()
Get list with all object created during processing (see Process()). 
 
TProfile * fProfile_perfstat_event
 
virtual void SetMinimum(Double_t minimum=-1111)
 
virtual Int_t GetEntry(Long64_t entry=0, Int_t getall=0)
Read all branches of entry and return total number of bytes read. 
 
virtual TDirectory * mkdir(const char *name, const char *title="")
Create a sub-directory and return a pointer to the created directory. 
 
const char *const kPROOF_BenchParDir
 
virtual TH1 * DrawCopy(Option_t *option="", const char *name_postfix="_copy") const
Copy this histogram and Draw in the current pad. 
 
Int_t SetParameters()
Set parameters. 
 
overwrite existing object with same name 
 
virtual TObject * FindObject(const char *name) const
Find an object in this list using its name. 
 
void FillPerfStatPerfPlots(TTree *t, Int_t nactive)
 
void Run(Long64_t nevents, Int_t start, Int_t stop, Int_t step, Int_t ntries, Int_t debug, Int_t draw)
Run benchmark Input parameters nevents: Number of events to run per file. 
 
virtual void SetValue(const char *name, const char *value, EEnvLevel level=kEnvChange, const char *type=0)
Set the value of a resource or create a new resource. 
 
TProfile * fProfile_queryresult_event
 
void Print(Option_t *option="") const
Description: Print node information. 
 
virtual void Print(Option_t *option="") const
Print status of PROOF cluster. 
 
static TString Format(const char *fmt,...)
Static method which formats a string using a printf style format descriptor and return a TString...
 
TProfile * fProfile_perfstat_evtmax
 
virtual Int_t SetBranchAddress(const char *bname, void *add, TBranch **ptr=0)
Change branch address, dealing with clone trees properly. 
 
virtual Bool_t IsWritable() const
 
Float_t GetProcTime() const
 
virtual const char * GetSelName()
 
const char * GetTitle() const
Returns title of object. 
 
virtual void SetMarkerColor(Color_t mcolor=1)
Set the marker color. 
 
void Clear(Option_t *option="")
Remove all primitives from the canvas. 
 
void SetHistType(TPBHistType *histtype)
Set histogram type. 
 
std::vector< std::vector< double > > Data
 
virtual Double_t GetBinContent(Int_t bin) const
Return bin content of a Profile histogram. 
 
Double_t GetEvtRateAvgMax() const
 
TQueryResult * GetQueryResult(const char *ref=0)
Return pointer to the full TQueryResult instance owned by the player and referenced by 'ref'...
 
A container class for query results. 
 
virtual Double_t GetBinError(Int_t bin) const
Return bin error of a Profile histogram. 
 
void Error(const char *location, const char *msgfmt,...)
 
TDirectory * fDirProofBench
 
Int_t UploadPackage(const char *par, EUploadPackageOpt opt=kUntar, TList *workers=0)
Upload a PROOF archive (PAR file). 
 
EHistType GetType() const
 
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write this object to the current directory. 
 
virtual void Draw(Option_t *option="")
Draw this histogram with options. 
 
Long64_t fEventsProcessed
 
virtual TObject * Remove(TObject *obj)
Remove object from the list. 
 
void DrawPerfPlots()
Draw Performance plots. 
 
void Form(const char *fmt,...)
Formats a string using a printf style format descriptor. 
 
virtual void Error(const char *method, const char *msgfmt,...) const
Issue error message. 
 
Int_t Fill(const Double_t *v)
 
virtual void SetMarkerStyle(Style_t mstyle=1)
Set the marker style. 
 
virtual Long64_t Process(TDSet *dset, const char *selector, Option_t *option="", Long64_t nentries=-1, Long64_t firstentry=0)
Process a data set (TDSet) using the specified selector (.C) file or Tselector object Entry- or event...
 
virtual const char * GetPath() const
Returns the full path of the directory. 
 
Float_t GetUsedCPU() const
 
void AddInput(TObject *obj)
Add objects that might be needed during the processing of the selector (see Process()). 
 
virtual ~TProofBenchRunCPU()
Destructor. 
 
void Print(Option_t *option="") const
Show settings. 
 
TList * GetInputList()
Get input list. 
 
TObjArray * Tokenize(const TString &delim) const
This function is used to isolate sequential tokens in a TString. 
 
virtual void SetDirectory(TDirectory *dir)
Change the tree's directory. 
 
void DeleteParameters(const char *wildcard)
Delete the input list parameters specified by a wildcard (e.g. 
 
TLegendEntry * AddEntry(const TObject *obj, const char *label="", Option_t *option="lpf")
Add a new entry to this legend. 
 
TProfile * fNorm_queryresult_event
 
Int_t ActivateWorkers(Int_t nwrks)
Description: Activate 'nwrks' workers; calls TProof::SetParallel and rebuild the internal lists Input...
 
TProfile * fNorm_perfstat_evtmax
 
Describe directory structure in memory. 
 
This class controls a Parallel ROOT Facility, PROOF, cluster. 
 
Bool_t Contains(const char *pat, ECaseCompare cmp=kExact) const
 
THist< 2, double, THistStatContent, THistStatUncertainty > TH2D
 
TString GetNameStem() const
Get name for this run. 
 
static TClass * GetClass(const char *name, Bool_t load=kTRUE, Bool_t silent=kFALSE)
Static method returning pointer to TClass of the specified class name. 
 
virtual void Clear(Option_t *option="")
Remove all objects from the list. 
 
virtual Long64_t GetEntries() const
 
Int_t DeleteParameters()
Delete parameters set for this run. 
 
Int_t GetMinWrksPerNode() const
 
Mother of all ROOT objects. 
 
TDatime GetEndTime() const
 
const char * GetName() const
Returns name of object. 
 
const char *const kPROOF_BenchSelCPUDef
 
virtual Bool_t cd(const char *path=0)
Change current directory to "this" directory. 
 
virtual void Divide(Int_t nx=1, Int_t ny=1, Float_t xmargin=0.01, Float_t ymargin=0.01, Int_t color=0)
Automatic pad generation by division. 
 
virtual void Add(TObject *obj)
 
virtual TDirectory * GetDirectory(const char *namecycle, Bool_t printError=false, const char *funcname="GetDirectory")
Find a directory using apath. 
 
void SetOptStat(Int_t stat=1)
The type of information printed in the histogram statistics box can be selected via the parameter mod...
 
TProfile * fProfile_cpu_eff
 
A TTree object has a header with a name and a title. 
 
TH2 * fHist_perfstat_event
 
Double_t Sqrt(Double_t x)
 
void BuildHistos(Int_t start, Int_t stop, Int_t step, Bool_t nx)
Build histograms, profiles and graphs needed for this run. 
 
virtual void Print(Option_t *option="") const
Default print for collections, calls Print(option, 1). 
 
virtual Int_t GetSize() const
 
Int_t Fill(Double_t)
Invalid Fill method. 
 
virtual void SetTitle(const char *title="")
Set the title of the TNamed. 
 
const char * GetName() const
Returns name of object. 
 
virtual Int_t Write(const char *name=0, Int_t option=0, Int_t bufsize=0)
Write all objects in this collection. 
 
virtual void Warning(const char *method, const char *msgfmt,...) const
Issue warning message. 
 
PROOF worker node information. 
 
virtual void SetName(const char *name)
Change the name of this tree. 
 
This class stores the date and time with a precision of one second in an unsigned 32 bit word (950130...
 
const char * Data() const