On 2/21/2012 16:34, Rainer Weikusat wrote:
> Kiuhnm<
kiuhnm03.4t.yahoo.it>  writes:
>>> 		d =>   sub {
>>> 		    my $l1;
>>>
>>> 		    for (keys(%ENV)) {
>>> 			if ((my $l = length($_))>   $l1) { $l1 = $; }
>>> 		    }
>>> 		}
>>> 	       });
>>> -------------
>>
>> If this isn't another Perl feature I don't know about, you forgot an
>> l' in your last assignment. On my PC, the 'l' improves the
>> efficiency.
>
> Not significantly (if at all).
It makes a huge difference on my configuration (~30%).
> You won't really get anything useful when running this only for 5
> seconds and the results aren't really stable even when using a much
> larger count:
>
> [rw@sapphire]/tmp $perl 
c.pl
> Benchmark: running a, c, d, e, f for at least 20 CPU seconds...
>           a: 20 wallclock secs (20.66 usr +  0.12 sys = 20.78 CPU) @ 207958.47/s (n=4321377)
>           c: 20 wallclock secs (19.97 usr +  0.03 sys = 20.00 CPU) @ 203267.70/s (n=4065354)
>           d: 21 wallclock secs (20.83 usr +  0.12 sys = 20.95 CPU) @ 169893.65/s (n=3559272)
>           e: 21 wallclock secs (20.89 usr +  0.06 sys = 20.95 CPU) @ 202873.51/s (n=4250200)
>           f: 20 wallclock secs (20.87 usr +  0.09 sys = 20.96 CPU) @ 207976.19/s (n=4359181)
> [rw@sapphire]/tmp $perl 
c.pl
> Benchmark: running a, c, d, e, f for at least 20 CPU seconds...
>           a: 22 wallclock secs (21.58 usr +  0.11 sys = 21.69 CPU) @ 200191.47/s (n=4342153)
>           c: 21 wallclock secs (20.70 usr +  0.05 sys = 20.75 CPU) @ 192327.61/s (n=3990798)
>           d: 20 wallclock secs (20.72 usr +  0.07 sys = 20.79 CPU) @ 149736.70/s (n=3113026)
>           e: 22 wallclock secs (21.96 usr +  0.04 sys = 22.00 CPU) @ 187564.00/s (n=4126408)
>           f: 19 wallclock secs (20.07 usr +  0.10 sys = 20.17 CPU) @ 201994.50/s (n=4074229)
>
> Especially, the relative positions of of (a, f) and (c, e) where the
> other way around for most of the runs I did. The result is roughly
> that a and f come out first, then, c and e, and then d, which is by
> far the worst.
 Well, the results are quite stable on *my* configuation:
Benchmark: running a, c, d, e, f for at least 20 CPU seconds...
          a: 22 wallclock secs (20.90 usr +  0.00 sys = 20.90 CPU) @ 
81467.61/s (n=1702999)
          c: 22 wallclock secs (21.09 usr +  0.00 sys = 21.09 CPU) @ 
79958.99/s (n=1686415)
          d: 21 wallclock secs (21.12 usr +  0.00 sys = 21.12 CPU) @ 
68458.93/s (n=1446058)
          e: 20 wallclock secs (21.04 usr +  0.00 sys = 21.04 CPU) @ 
84107.30/s (n=1769954)
          f: 20 wallclock secs (21.43 usr +  0.00 sys = 21.43 CPU) @ 
81938.84/s (n=1756277)
Benchmark: running a, c, d, e, f for at least 20 CPU seconds...
          a: 22 wallclock secs (21.29 usr +  0.00 sys = 21.29 CPU) @ 
81483.14/s (n=1735102)
          c: 21 wallclock secs (21.09 usr +  0.00 sys = 21.09 CPU) @ 
80093.83/s (n=1689259)
          d: 20 wallclock secs (21.03 usr +  0.00 sys = 21.03 CPU) @ 
68558.51/s (n=1441717)
          e: 22 wallclock secs (21.05 usr +  0.00 sys = 21.05 CPU) @ 
84064.81/s (n=1769144)
          f: 22 wallclock secs (21.25 usr +  0.02 sys = 21.26 CPU) @ 
82042.33/s (n=1744384)
Benchmark: running a, c, d, e, f for at least 20 CPU seconds...
          a: 21 wallclock secs (20.90 usr +  0.00 sys = 20.90 CPU) @ 
81467.61/s (n=1702999)
          c: 20 wallclock secs (21.00 usr +  0.00 sys = 21.00 CPU) @ 
80486.76/s (n=1690061)
          d: 22 wallclock secs (21.12 usr +  0.00 sys = 21.12 CPU) @ 
68882.97/s (n=1454946)
          e: 22 wallclock secs (21.22 usr +  0.00 sys = 21.22 CPU) @ 
84137.82/s (n=1785068)
          f: 22 wallclock secs (21.36 usr +  0.00 sys = 21.36 CPU) @ 
82275.52/s (n=1757076)
And the results won't change if I go from 20 s. to "just" 5 s.:
Benchmark: running a, c, d, e, f for at least 5 CPU seconds...
          a:  5 wallclock secs ( 5.27 usr +  0.00 sys =  5.27 CPU) @ 
81488.15/s (n=429687)
          c:  5 wallclock secs ( 5.23 usr +  0.00 sys =  5.23 CPU) @ 
80314.20/s (n=419722)
          d:  4 wallclock secs ( 5.34 usr +  0.00 sys =  5.34 CPU) @ 
68570.09/s (n=365890)
          e:  6 wallclock secs ( 5.26 usr +  0.00 sys =  5.26 CPU) @ 
84131.25/s (n=442278)
          f:  6 wallclock secs ( 5.35 usr +  0.00 sys =  5.35 CPU) @ 
82214.91/s (n=439932)
Why should they?
Kiuhnm