bison-patches
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: push parser implemenation


From: Bob Rossi
Subject: Re: push parser implemenation
Date: Fri, 7 Apr 2006 10:04:49 -0400
User-agent: Mutt/1.5.9i

> >Benchmark: timing 50 iterations of push-pure, push-push, push-yacc,  
> >yacc-pure, yacc-yacc...
> > push-pure: 64 wallclock secs ( 0.00 usr  0.07 sys + 45.05 cusr   
> >1.36 csys = 46.48 CPU) @ 714.29/s (n=50)
> > push-push: 77 wallclock secs ( 0.00 usr  0.07 sys + 50.53 cusr   
> >1.56 csys = 52.16 CPU) @ 714.29/s (n=50)
> > push-yacc: 66 wallclock secs ( 0.00 usr  0.07 sys + 45.51 cusr   
> >1.40 csys = 46.98 CPU) @ 714.29/s (n=50)
> > yacc-pure: 55 wallclock secs ( 0.00 usr  0.07 sys + 36.98 cusr   
> >1.25 csys = 38.30 CPU) @ 714.29/s (n=50)
> > yacc-yacc: 54 wallclock secs ( 0.00 usr  0.07 sys + 38.12 cusr   
> >1.23 csys = 39.42 CPU) @ 714.29/s (n=50)
> >           Rate push-push yacc-yacc yacc-pure push-pure push-yacc
> >push-push 714/s        --        0%        0%        0%       -0%
> >yacc-yacc 714/s        0%        --        0%        0%       -0%
> >yacc-pure 714/s        0%        0%        --        0%       -0%
> >push-pure 714/s        0%        0%        0%        --       -0%
> >push-yacc 714/s        0%        0%        0%        0%        --
> >
> >I confess I don't understand the table output by this Perl module
> >here.  What is this "rate"?
> 
> Now (that I read the code) I have it: to compute the rate, it sums  
> the usr and sys time for the parent (i.e., the call to "system")  
> which is consistenly 0.07 here for the 50 iterations.  Hence, a  
> "rate" of 50/0.07 / 714,285714285714.
> 
> If I change the cmpthese call into "cmpthese ($res, 'nop')" (nop  
> stands for noparents), and similarly for timethese, then I have  
> better results:
> 
> 
> No optimization:
> Benchmark: timing 50 iterations of push-pure, push-push, push-yacc,  
> yacc-pure, yacc-yacc...
> push-pure: 64 wallclock secs (45.00 cusr +  1.26 csys = 46.26 CPU) @   
> 1.08/s (n=50)
> push-push: 66 wallclock secs (50.38 cusr +  1.21 csys = 51.59 CPU) @   
> 0.97/s (n=50)
> push-yacc: 68 wallclock secs (45.49 cusr +  1.30 csys = 46.79 CPU) @   
> 1.07/s (n=50)
> yacc-pure: 57 wallclock secs (36.95 cusr +  1.17 csys = 38.12 CPU) @   
> 1.31/s (n=50)
> yacc-yacc: 57 wallclock secs (38.06 cusr +  1.17 csys = 39.23 CPU) @   
> 1.27/s (n=50)
>              Rate push-push push-yacc push-pure yacc-yacc yacc-pure
> push-push 0.969/s        --       -9%      -10%      -24%      -26%
> push-yacc  1.07/s       10%        --       -1%      -16%      -19%
> push-pure  1.08/s       12%        1%        --      -15%      -18%
> yacc-yacc  1.27/s       32%       19%       18%        --       -3%
> yacc-pure  1.31/s       35%       23%       21%        3%        --
> 
> (as an aside, there is no point in not using pure parsers: they are  
> slightly faster.  But I'm on a PPC, so I wouldn't be surprised if  
> more stuff be kept in registers, hence easily beating global  
> variables...  Maybe the figures would be different on Intel chips).
> 
> With -O2:
> 
> Benchmark: timing 50 iterations of push-pure, push-push, push-yacc,  
> yacc-pure, yacc-yacc...
> push-pure: 30 wallclock secs (20.94 cusr +  0.88 csys = 21.82 CPU) @   
> 2.29/s (n=50)
> push-push: 34 wallclock secs (22.96 cusr +  0.95 csys = 23.91 CPU) @   
> 2.09/s (n=50)
> push-yacc: 30 wallclock secs (21.47 cusr +  0.91 csys = 22.38 CPU) @   
> 2.23/s (n=50)
> yacc-pure: 26 wallclock secs (17.78 cusr +  0.85 csys = 18.63 CPU) @   
> 2.68/s (n=50)
> yacc-yacc: 25 wallclock secs (18.50 cusr +  0.85 csys = 19.35 CPU) @   
> 2.58/s (n=50)
>             Rate push-push push-yacc push-pure yacc-yacc yacc-pure
> push-push 2.09/s        --       -6%       -9%      -19%      -22%
> push-yacc 2.23/s        7%        --       -3%      -14%      -17%
> push-pure 2.29/s       10%        3%        --      -11%      -15%
> yacc-yacc 2.58/s       24%       16%       13%        --       -4%
> yacc-pure 2.68/s       28%       20%       17%        4%        --
> 
> For fun, -O3:
> 
> Benchmark: timing 50 iterations of push-pure, push-push, push-yacc,  
> yacc-pure, yacc-yacc...
> push-pure: 26 wallclock secs (17.99 cusr +  0.84 csys = 18.83 CPU) @   
> 2.66/s (n=50)
> push-push: 28 wallclock secs (19.84 cusr +  0.86 csys = 20.70 CPU) @   
> 2.42/s (n=50)
> push-yacc: 27 wallclock secs (18.46 cusr +  0.89 csys = 19.35 CPU) @   
> 2.58/s (n=50)
> yacc-pure: 22 wallclock secs (15.88 cusr +  0.82 csys = 16.70 CPU) @   
> 2.99/s (n=50)
> yacc-yacc: 22 wallclock secs (16.43 cusr +  0.81 csys = 17.24 CPU) @   
> 2.90/s (n=50)
>             Rate push-push push-yacc push-pure yacc-yacc yacc-pure
> push-push 2.42/s        --       -7%       -9%      -17%      -19%
> push-yacc 2.58/s        7%        --       -3%      -11%      -14%
> push-pure 2.66/s       10%        3%        --       -8%      -11%
> yacc-yacc 2.90/s       20%       12%        9%        --       -3%
> yacc-pure 2.99/s       24%       16%       13%        3%        --
> 
> 
> 
> 
> sulaco-eth% gcc --version
> powerpc-apple-darwin8-gcc-4.0.0 (GCC) 4.0.0 (Apple Computer, Inc.  
> build 5026)
> Copyright (C) 2005 Free Software Foundation, Inc.
> This is free software; see the source for copying conditions.  There  
> is NO
> warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR  
> PURPOSE.

I still don't know how to read those charts. I would assume that more
'wallclock' seems like it's slower. However, the 'Rate' makes the push
parser seem the fastest! What does that mean?

Is there an easy script I can run on my Linux/AMD machine to generate 
these results?

Thanks,
Bob Rossi




reply via email to

[Prev in Thread] Current Thread [Next in Thread]