On Sat, Apr 28, 2018 at 11:55 AM, Jan Hubicka <hubi...@ucw.cz> wrote:
> Hi,
> with number of cores increasing our partitioning algorithm needs some love,
> because it works quite bad.
>
> This patch fixes few issues with ballanced partitioning algorithm:
>  1) I have switched all size/boundary summaries to 64bit arthmetics as they
>     may overflow for very large units
>  2) internal calls within partition was misaccounted
>  3) I no longer account external references (as those will never be local
>     no matter how we partition)
>  4) the range where we search for best split is not +- 1/8 of partition.
>  5) we no longer look for worst possible split, but for best one.
>  6) I have added bit extra debug info.
>
> I have checked this with Firefox build. Previously we did 31 instead of 32 
> partitions
> and the difference between largest and smallest was 170%.  Now we do 32 
> partitions and get
> the difference is "only" about 70%.  The resulting code quality improves a 
> bit and
> we get 260s for largest partition build time instead of 305s.
>
> I will commit it into the mainline and backport to release branches after 
> some soaking
> (and 8.1 release), since without the patch partitioning decisions with larger 
> # of partitions
> are really pretty bad.
>
> Situation is still not perfect - I do not get any speedup for increasing 
> partitions to 64
> becuase we still get too much of extra streaming. Something to track this 
> stage1.
>
> Honza
>
>         * lto-partition.c: Include sreal.h
>         (add_symbol_to_partition_1): Use size instead of self_size
>         for size estimate.
>         (account_reference_p): New.
>         (lto_balanced_map): Use 64bit arithmetics for size calculatoins; 
> cleanup;
>         fix accounting errors in boundary size; add debug output; combine cost
>         as cost/size instead of cost/internal; reduce the partitioning error 
> to
>         +- 1/8 of the parttion size.


This caused:

FAIL: gcc.dg/lto/20081204-2 c_lto_20081204-2_0.o-c_lto_20081204-2_0.o
link, -w -flto -fPIC -r -nostdlib (internal compiler error)
FAIL: gcc.dg/lto/20090914-2 c_lto_20090914-2_0.o-c_lto_20090914-2_0.o
link, -O2 -flto -fuse-linker-plugin (internal compiler error)
FAIL: gcc.dg/lto/20091014-1 c_lto_20091014-1_0.o-c_lto_20091014-1_0.o
link, -fPIC -r -nostdlib -flto (internal compiler error)
FAIL: gcc.dg/lto/20100603-1 c_lto_20100603-1_0.o-c_lto_20100603-1_0.o
link, -O0 -flto -fuse-linker-plugin -fno-fat-lto-objects  (internal
compiler error)
FAIL: gcc.dg/lto/20100603-1 c_lto_20100603-1_0.o-c_lto_20100603-1_0.o
link, -O2 -flto -fuse-linker-plugin (internal compiler error)
FAIL: g++.dg/lto/20081120-1
cp_lto_20081120-1_0.o-cp_lto_20081120-1_1.o link, -flto -r -nostdlib
(internal compiler error)
FAIL: g++.dg/lto/20081120-2
cp_lto_20081120-2_0.o-cp_lto_20081120-2_1.o link, -flto -r -nostdlib
(internal compiler error)

on x86.

-- 
H.J.

Reply via email to