> 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=
> 

Reply via email to