This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Current results
- To: gcc at gcc dot gnu dot org
- Subject: Current results
- From: Daniel Berlin <dan at cgsoftware dot com>
- Date: Tue, 10 Jul 2001 02:44:09 -0400
Assume performance stays constant (it pretty much does).
Using two tweakable heuristics (code growth by a factor of x, and all functions smaller
than the cost to call them), we get the following compile times, just
for the record.
Before any work (old "10k" limit):
31.28 seconds
Code growth factor of 300 (for statistics sake):
49.31 seconds [1]
Code growth factor of 50 (should be ~the same as the old)
29.28 seconds
Code growth factor of 3 (current default because it didn't seem to
increase compile time by a noticeable amount, I personally think it's
too high, but i wanted to do real benchmarks in the morning to see):
8.28 seconds
Code growth factor of 2:
7.69 seconds
Code growth factor of 0/1 (equivalent, (0/1) * orig size is never >
added_inline_stmts_so_far + original_size)
7.07 seconds
And we are back to the parser getting the blame for being the slowest
part again. :)
Memory usage is down by 11 meg peak / 9 meg average too.
(20 vs 31, usually fluctuating between 18.5 and 20 and 28 and 31)
[1] Great way to test out bottlenecks in optimization passes, since
you end up with lots of bb's and insns that you can optimize away in
different fashions. We do 1700 copy props, 300 pre hoists/expression removals.
For some actual breakdowns of timing:
This is code growth 300:
garbage collection : 2.25 ( 5%) usr 0.01 ( 0%) sys 2.43 ( 4%) wall
preprocessing : 0.16 ( 0%) usr 0.03 ( 1%) sys 0.19 ( 0%) wall
lexical analysis : 0.30 ( 1%) usr 0.07 ( 3%) sys 0.37 ( 1%) wall
parser : 2.00 ( 4%) usr 1.23 (46%) sys 3.48 ( 6%) wall
expand : 10.10 (20%) usr 0.18 ( 7%) sys 10.89 (20%) wall
varconst : 0.02 ( 0%) usr 0.00 ( 0%) sys 0.02 ( 0%) wall
integration : 0.47 ( 1%) usr 0.04 ( 1%) sys 0.51 ( 1%) wall
jump : 4.50 ( 9%) usr 0.18 ( 7%) sys 4.99 ( 9%) wall
CSE : 3.51 ( 7%) usr 0.02 ( 1%) sys 3.76 ( 7%) wall
global CSE : 6.04 (12%) usr 0.18 ( 7%) sys 6.55 (12%) wall
loop analysis : 0.65 ( 1%) usr 0.08 ( 3%) sys 0.78 ( 1%) wall
CSE 2 : 1.29 ( 3%) usr 0.01 ( 0%) sys 1.35 ( 2%) wall
flow analysis : 0.96 ( 2%) usr 0.00 ( 0%) sys 1.01 ( 2%) wall
combiner : 0.49 ( 1%) usr 0.00 ( 0%) sys 0.49 ( 1%) wall
if-conversion : 0.18 ( 0%) usr 0.01 ( 0%) sys 0.19 ( 0%) wall
regmove : 0.16 ( 0%) usr 0.01 ( 0%) sys 0.17 ( 0%) wall
scheduling : 10.39 (21%) usr 0.59 (22%) sys 11.61 (21%) wall
local alloc : 0.99 ( 2%) usr 0.00 ( 0%) sys 1.05 ( 2%) wall
global alloc : 0.92 ( 2%) usr 0.03 ( 1%) sys 0.95 ( 2%) wall
reload CSE regs : 0.98 ( 2%) usr 0.01 ( 0%) sys 1.04 ( 2%) wall
flow 2 : 0.62 ( 1%) usr 0.00 ( 0%) sys 0.74 ( 1%) wall
if-conversion 2 : 0.04 ( 0%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall
rename registers : 0.36 ( 1%) usr 0.00 ( 0%) sys 0.42 ( 1%) wall
scheduling 2 : 1.09 ( 2%) usr 0.00 ( 0%) sys 1.15 ( 2%) wall
reorder blocks : 0.13 ( 0%) usr 0.00 ( 0%) sys 0.13 ( 0%) wall
shorten branches : 0.09 ( 0%) usr 0.00 ( 0%) sys 0.09 ( 0%) wall
final : 0.15 ( 0%) usr 0.01 ( 0%) sys 0.16 ( 0%) wall
symout : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall
rest of compilation : 0.42 ( 1%) usr 0.01 ( 0%) sys 0.43 ( 1%) wall
TOTAL : 49.31 2.70 55.04
And this is code growth 2:
Execution times (seconds)
garbage collection : 1.32 (17%) usr 0.02 ( 5%) sys 1.40 (16%) wall
preprocessing : 0.18 ( 2%) usr 0.06 (15%) sys 0.30 ( 3%) wall
lexical analysis : 0.28 ( 4%) usr 0.05 (13%) sys 0.34 ( 4%) wall
parser : 2.05 (26%) usr 0.19 (49%) sys 2.38 (27%) wall
expand : 0.27 ( 3%) usr 0.01 ( 3%) sys 0.28 ( 3%) wall
varconst : 0.06 ( 1%) usr 0.01 ( 3%) sys 0.06 ( 1%) wall
integration : 0.06 ( 1%) usr 0.00 ( 0%) sys 0.06 ( 1%) wall
jump : 0.19 ( 2%) usr 0.00 ( 0%) sys 0.25 ( 3%) wall
CSE : 0.52 ( 7%) usr 0.00 ( 0%) sys 0.52 ( 6%) wall
global CSE : 0.17 ( 2%) usr 0.02 ( 5%) sys 0.19 ( 2%) wall
loop analysis : 0.05 ( 1%) usr 0.00 ( 0%) sys 0.05 ( 1%) wall
CSE 2 : 0.20 ( 3%) usr 0.00 ( 0%) sys 0.20 ( 2%) wall
flow analysis : 0.25 ( 3%) usr 0.00 ( 0%) sys 0.25 ( 3%) wall
combiner : 0.07 ( 1%) usr 0.00 ( 0%) sys 0.07 ( 1%) wall
if-conversion : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
regmove : 0.07 ( 1%) usr 0.00 ( 0%) sys 0.08 ( 1%) wall
scheduling : 0.26 ( 3%) usr 0.00 ( 0%) sys 0.31 ( 4%) wall
local alloc : 0.45 ( 6%) usr 0.00 ( 0%) sys 0.50 ( 6%) wall
global alloc : 0.28 ( 4%) usr 0.00 ( 0%) sys 0.33 ( 4%) wall
reload CSE regs : 0.33 ( 4%) usr 0.00 ( 0%) sys 0.33 ( 4%) wall
flow 2 : 0.15 ( 2%) usr 0.01 ( 3%) sys 0.16 ( 2%) wall
if-conversion 2 : 0.01 ( 0%) usr 0.00 ( 0%) sys 0.01 ( 0%) wall
rename registers : 0.14 ( 2%) usr 0.00 ( 0%) sys 0.14 ( 2%) wall
scheduling 2 : 0.24 ( 3%) usr 0.00 ( 0%) sys 0.24 ( 3%) wall
reorder blocks : 0.03 ( 0%) usr 0.00 ( 0%) sys 0.03 ( 0%) wall
shorten branches : 0.04 ( 1%) usr 0.00 ( 0%) sys 0.04 ( 0%) wall
final : 0.05 ( 1%) usr 0.00 ( 0%) sys 0.05 ( 1%) wall
symout : 0.00 ( 0%) usr 0.00 ( 0%) sys 0.00 ( 0%) wall
rest of compilation : 0.08 ( 1%) usr 0.00 ( 0%) sys 0.08 ( 1%) wall
TOTAL : 7.85 0.39 8.76
Notice we are back to being garbage collection and parsing time
dependent, as we used to be.
Patch coming tomoorrow morning, it's 3 am.
--Dan
--
"I used to be a bartender at the Betty Ford Clinic.
"-Steven Wright