> Hi. > > I played a bit with -flinker-output=nolto-rel of gimple-match.ii and I > identified > that current default of min-lto-partition leads to too many LTRANS. We pay > with > LTO overhead and so that user time is high. > > Base is: > $ g++ -O2 /tmp/gimple-match.ii -c -fno-checking -o x.o > real 0m40.130s > user 0m39.911s
Did you configured compiler with checking? If so, I think the benchmarks are not that good, because -fchecking does not control everything. It would be relevant for gcc bootstrap but notmuch else. In that case I would go with explicit --param in our Makefile. I tried your experiment with linking tramp3d (with -O2 -flto on EPYC) hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=10000 real 0m12.574s user 1m5.010s sys 0m0.970s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=20000 real 0m17.926s user 1m1.259s sys 0m1.153s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=30000 real 0m22.115s user 0m56.964s sys 0m0.892s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=40000 real 0m23.510s user 0m50.783s sys 0m0.983s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=50000 real 0m28.410s user 0m46.146s sys 0m0.680s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=60000 real 0m32.304s user 0m46.114s sys 0m0.720s hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=70000 real 0m42.332s user 0m50.521s sys 0m0.749s So going from 10000 to 70000 seems to decarese user time from 65 to 50s (30% reduction) however the overall linktime goes up from 12s to 42s (3.5 times) Which does not seem that great tradeoff. Moreover I seem to get best results with: hubicka@lomikamen-jh:~$ time /aux/hubicka/trunk-install/bin/g++ -flto=auto tramp3d-v44.o --param lto-min-partition=1 --param lto-partitions=200 real 0m5.752s user 1m8.949s sys 0m3.826s Both genmatch and tramp3d seems bit extreme sources, but perhaps we want to explore thi bit further.. I will try to re-measure your results on my setup so we get idea how much sensitive it is :) Honza > > LGEN: > > $ time g++ -O2 /tmp/gimple-match.ii -c -flto -fno-checking > real 0m8.709s > user 0m8.543s > > WPA+LTRANS: > > $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o > gimple-match2.o --param lto-partitions=4 -fno-checking > real 0m11.220s > user 0m33.067s > > $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o > gimple-match2.o --param lto-partitions=6 -fno-checking > real 0m9.880s > user 0m35.599s > > $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o > gimple-match2.o --param lto-partitions=8 -fno-checking > real 0m6.681s > user 0m39.746s > > default: > $ time gcc -flto=auto -flinker-output=nolto-rel gimple-match.o -r -o > gimple-match2.o -fno-checking > real 0m6.065s > user 1m22.698s > > So I would recommend to set the param value to 75000, which leads to 6 > partitions. That would be: > > 9+10s = 19s vs. 40s (total real time 44s). That seems reasonable to me. > > Thoughts? > Thanks, > Martin > > gcc/ChangeLog: > > 2020-03-13 Martin Liska <mli...@suse.cz> > > * params.opt: Bump min-lto-partition in order to not create > too many LTRANS. > --- > gcc/params.opt | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > > diff --git a/gcc/params.opt b/gcc/params.opt > index e39216aa7d0..49fafac20af 100644 > --- a/gcc/params.opt > +++ b/gcc/params.opt > @@ -363,7 +363,7 @@ Common Joined UInteger > Var(param_max_lto_streaming_parallelism) Init(32) Integer > maximal number of LTO partitions streamed in parallel. > > -param=lto-min-partition= > -Common Joined UInteger Var(param_min_partition_size) Init(10000) Param > +Common Joined UInteger Var(param_min_partition_size) Init(75000) Param > Minimal size of a partition for LTO (in estimated instructions). > > -param=lto-partitions= >