This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Huge compile time & run time performance regression 3.3 -> HEAD
- From: Richard Guenther <rguenth at tat dot physik dot uni-tuebingen dot de>
- To: Matt Austern <austern at apple dot com>
- Cc: gcc at gcc dot gnu dot org
- Date: Mon, 19 May 2003 20:48:02 +0200 (CEST)
- Subject: Re: Huge compile time & run time performance regression 3.3 -> HEAD
On Mon, 19 May 2003, Matt Austern wrote:
> On Sunday, May 18, 2003, at 08:45 AM, Richard Guenther wrote:
>
> > Hi!
> >
> > As 3.3 is now out, I start comparing 3.3 to HEAD wrt compile time
> > performance and performance of the resulting code. As always these
> > comparisons are for a POOMA based scientific application.
> >
> > I experience a 100% compile time regression (673.50s -> 1284.48s) and
> > a 12% runtime performance regression (150s -> 171s) when comparing
> > gcc3.3 to HEAD.
> >
> > Time reports follow, the most prominent regressions are expand, global
> > CSE
> > (>300%!), loop analysis and branch prediction.
> >
> > Compile options are -ftemplate-depth-80 -fno-exceptions -O2
> > -march=athlon
> > -funroll-loops -fomit-frame-pointer
>
> Do you see any compile time regressions at -O0?
>
> (I'm asking for the obvious reason: trying to find out how much work we
> need to do in the front end as opposed to the back end.)
For 3.3 with -O0 I get:
Execution times (seconds)
garbage collection : 13.19 ( 2%) usr 0.00 ( 0%) sys 12.50 ( 2%)
wall
cfg construction : 2.11 ( 0%) usr 0.02 ( 1%) sys 2.50 ( 0%)
wall
cfg cleanup : 0.83 ( 0%) usr 0.00 ( 0%) sys 1.00 ( 0%)
wall
trivially dead code : 1.68 ( 0%) usr 0.00 ( 0%) sys 2.00 ( 0%)
wall
life analysis : 5.30 ( 1%) usr 0.01 ( 0%) sys 7.00 ( 1%)
wall
life info update : 1.46 ( 0%) usr 0.00 ( 0%) sys 1.00 ( 0%)
wall
preprocessing : 0.57 ( 0%) usr 0.24 ( 8%) sys 0.50 ( 0%)
wall
lexical analysis : 0.44 ( 0%) usr 0.18 ( 6%) sys 0.50 ( 0%)
wall
parser : 14.73 ( 2%) usr 0.54 (17%) sys 14.50 ( 2%)
wall
name lookup : 7.38 ( 1%) usr 0.95 (30%) sys 7.50 ( 1%)
wall
expand : 539.94 (81%) usr 0.54 (17%) sys 540.00 (81%)
wall
varconst : 0.72 ( 0%) usr 0.01 ( 0%) sys 1.00 ( 0%)
wall
integration : 19.82 ( 3%) usr 0.19 ( 6%) sys 19.50 ( 3%)
wall
jump : 2.51 ( 0%) usr 0.00 ( 0%) sys 3.50 ( 1%)
wall
flow analysis : 0.89 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
mode switching : 2.33 ( 0%) usr 0.01 ( 0%) sys 3.00 ( 0%)
wall
scheduling : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%)
wall
local alloc : 9.75 ( 1%) usr 0.01 ( 0%) sys 11.00 ( 2%)
wall
global alloc : 23.63 ( 4%) usr 0.15 ( 5%) sys 22.50 ( 3%)
wall
flow 2 : 1.59 ( 0%) usr 0.01 ( 0%) sys 0.00 ( 0%)
wall
shorten branches : 2.15 ( 0%) usr 0.00 ( 0%) sys 1.50 ( 0%)
wall
reg stack : 1.48 ( 0%) usr 0.00 ( 0%) sys 3.00 ( 0%)
wall
final : 3.79 ( 1%) usr 0.31 (10%) sys 6.50 ( 1%)
wall
rest of compilation : 10.17 ( 2%) usr 0.02 ( 1%) sys 10.00 ( 1%)
wall
TOTAL : 666.48 3.19 670.50
For 3.4:
Execution times (seconds)
garbage collection : 12.27 ( 2%) usr 0.10 ( 0%) sys 12.38 ( 2%)
wall
cfg construction : 2.25 ( 0%) usr 0.10 ( 0%) sys 2.30 ( 0%)
wall
cfg cleanup : 0.99 ( 0%) usr 0.01 ( 0%) sys 0.89 ( 0%)
wall
trivially dead code : 1.31 ( 0%) usr 0.00 ( 0%) sys 1.39 ( 0%)
wall
life analysis : 5.39 ( 1%) usr 0.12 ( 1%) sys 5.65 ( 1%)
wall
life info update : 1.42 ( 0%) usr 0.00 ( 0%) sys 1.49 ( 0%)
wall
register scan : 1.34 ( 0%) usr 0.02 ( 0%) sys 1.33 ( 0%)
wall
rebuild jump labels : 1.22 ( 0%) usr 0.00 ( 0%) sys 1.23 ( 0%)
wall
preprocessing : 0.44 ( 0%) usr 0.17 ( 1%) sys 0.91 ( 0%)
wall
parser : 14.65 ( 2%) usr 0.65 ( 3%) sys 14.82 ( 2%)
wall
name lookup : 9.66 ( 1%) usr 0.77 ( 4%) sys 10.66 ( 1%)
wall
expand : 555.99 (78%) usr 11.15 (54%) sys 567.86 (78%)
wall
varconst : 0.73 ( 0%) usr 0.01 ( 0%) sys 0.71 ( 0%)
wall
integration : 17.85 ( 3%) usr 6.29 (30%) sys 24.09 ( 3%)
wall
jump : 0.79 ( 0%) usr 0.04 ( 0%) sys 0.86 ( 0%)
wall
flow analysis : 0.66 ( 0%) usr 0.00 ( 0%) sys 0.85 ( 0%)
wall
mode switching : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.05 ( 0%)
wall
scheduling : 0.01 ( 0%) usr 0.01 ( 0%) sys 0.00 ( 0%)
wall
local alloc : 37.47 ( 5%) usr 0.03 ( 0%) sys 37.60 ( 5%)
wall
global alloc : 24.17 ( 3%) usr 0.80 ( 4%) sys 24.83 ( 3%)
wall
flow 2 : 1.53 ( 0%) usr 0.07 ( 0%) sys 1.56 ( 0%)
wall
machine dep reorg : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%)
wall
shorten branches : 2.60 ( 0%) usr 0.04 ( 0%) sys 2.79 ( 0%)
wall
reg stack : 1.31 ( 0%) usr 0.00 ( 0%) sys 1.35 ( 0%)
wall
final : 4.38 ( 1%) usr 0.22 ( 1%) sys 4.62 ( 1%)
wall
symout : 0.00 ( 0%) usr 0.01 ( 0%) sys 0.00 ( 0%)
wall
rest of compilation : 10.13 ( 1%) usr 0.22 ( 1%) sys 9.96 ( 1%)
wall
TOTAL : 708.60 20.83 730.22
Thats about 60s difference in wall clock time. Is it true, that even at
-O0 -finline is set?
Richard.