Hi Marian,
for example, to get a nightly build of root master on lxplus7
, I would do:
$ ssh eguiraud@lxplus7.cern.ch
[eguiraud@lxplus089 ~]$ source /cvmfs/sft.cern.ch/lcg/views/dev3/latest/x86_64-centos7-gcc7-opt/setup.sh
[eguiraud@lxplus089 ~]$ root-config --version # verify ROOT version
6.15/01
Regarding Snapshot
:
when you write df.Snapshot(outtree, outfile, default_branches_out)
this tells TDataFrame
to save to disk all of the branches present in the list of names default_branches_out
. In your case this is a list of 217 column names. Under the hood, this generates code equivalent to the following, which cling compiles:
df.Snapshot<T1,T2,T3,T4,...,T217>(outtree, outfile, default_branches_out)
where T1...T217
are the types of the 217 columns. It takes several seconds for cling to digest that large template function call. It would take a similarly large time for g++ to digest it if you explicitly wrote the template parameters yourself in tree_trimmerTDF.C
, with the difference that the time would then be spent at compile-time, not at runtime. This is what is going on during that phase with a single core running and RAM usage increasing: a large template function call is being just-in-time compiled.
We will be looking into reducing this overhead of course (thanks for digging up this corner case, we never benchmarked snapshotting of these many columns with TDF), but keep in mind that it is ~15s constant overhead that does not depend on the amount of data you have (only on the number of columns you want to snapshot).
Hope this makes it more clear.
Cheers,
Enrico