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