iucar / rpms / root

Forked from rpms/root 3 years ago
Clone
Blob Blame History Raw
diff -ur root-6.06.02.orig/tutorials/multicore/mp101_fillNtuples.C root-6.06.02/tutorials/multicore/mp101_fillNtuples.C
--- root-6.06.02.orig/tutorials/multicore/mp101_fillNtuples.C	2016-03-03 10:36:03.000000000 +0100
+++ root-6.06.02/tutorials/multicore/mp101_fillNtuples.C	2016-03-21 19:56:55.414726427 +0100
@@ -33,6 +33,9 @@
    // Total amount of numbers
    const UInt_t nNumbers = 20000000U;
 
+   // We split the work in equal parts
+   const auto workSize = nNumbers / nWorkers;
+
    // A simple function to fill ntuples randomly
 
    auto fillRandom = [](TNtuple & ntuple, TRandom3 & rndm, UInt_t n) {
@@ -57,7 +60,7 @@
    // We now go MP! ------------------------------------------------------------
 
    // We define our work item
-   auto workItem = [&fillRandom](UInt_t workerID, UInt_t workSize) {
+   auto workItem = [&fillRandom, &workSize](UInt_t workerID) {
       // One generator, file and ntuple per worker
       TRandom3 workerRndm(workerID); // Change the seed
       TFile ofile(Form("mp101_multiCore_%u.root", workerID), "RECREATE");
@@ -74,18 +77,10 @@
    {
       TimerRAII t("Parallel execution");
 
-      // We split the work in equal parts
-      const auto workSize = nNumbers / nWorkers;
-
-      // The work item requires two arguments, the map infrastructure offer
-      // an interface to use only one. A standard solution is to use std::bind
-      using namespace std::placeholders;
-      auto workItemOneArg = std::bind(workItem, _1, workSize);
-
       // Fill the pool with work
       std::forward_list<UInt_t> workerIDs(nWorkers);
       std::iota(std::begin(workerIDs), std::end(workerIDs), 0);
-      workers.Map(workItemOneArg, workerIDs);
+      workers.Map(workItem, workerIDs);
    }
 
    return 0;