Logo ROOT   6.30.04
Reference Guide
 All Namespaces Files Pages
mtbb201_parallelHistoFill.C
Go to the documentation of this file.
1 /// \file
2 /// \ingroup tutorial_multicore
3 /// \notebook
4 /// Parallel fill of a histogram.
5 /// This tutorial shows how a histogram can be filled in parallel
6 /// with a multiprocess approach.
7 ///
8 /// \macro_image
9 /// \macro_code
10 ///
11 /// \date January 2016
12 /// \author Danilo Piparo.
13 
14 const UInt_t poolSize = 4U;
15 
16 Int_t mtbb201_parallelHistoFill()
17 {
18  ROOT::EnableThreadSafety();
19  TH1::AddDirectory(false);
20  ROOT::TThreadExecutor pool(poolSize);
21  auto fillRandomHisto = [](int seed = 0) {
22  TRandom3 rndm(seed);
23  auto h = new TH1F("myHist", "Filled in parallel", 128, -8, 8);
24  for (auto i : ROOT::TSeqI(1000000)) {
25  h->Fill(rndm.Gaus(0, 1));
26  }
27  return h;
28  };
29 
30  auto seeds = ROOT::TSeqI(23);
31  ROOT::ExecutorUtils::ReduceObjects<TH1F *> redfunc;
32  auto sumRandomHisto = pool.MapReduce(fillRandomHisto, seeds, redfunc);
33 
34  auto c = new TCanvas();
35  sumRandomHisto->Draw();
36  return 0;
37 }