Beefy Boxes and Bandwidth Generously Provided by pair Networks
XP is just a number
 
PerlMonks  

comment on

( [id://3333]=superdoc: print w/replies, xml ) Need Help??

It's been a while and thought to compare between Perl 5.8.9 - 5.26.0. Also cperl 5.24.2. First, I modified mat_look to safegaurd from auto-vivification. Thanks, roboticus. Results were obtains from a Mac laptop running at 2.6 GHz (i7 Haswell).

sub mat_look { my $cells = shift; for my $p (@points) { exists $cells->{$p->[0]} or die; exists $cells->{$p->[0]}{$p->[1]} or die; } exists $cells->{'notfound'} and die; exists $cells->{'notfound2'} and die; exists $cells->{'notfound3'} and die; }

Results from Perl 5.8.9 - 5.26.0.

timethese 200000, { Big => sub { big_look($big_ref) }, # $cells->{ ($p->[1] << 32) | ($ +p->[0] & 0xFFFFFFFF) } Lan => sub { lan_look($lan_ref) }, # $cells->{ "@$p" } Mat => sub { mat_look($mat_ref) }, # $cells->{ $_->[0] }{ $_->[1] } Pak => sub { pak_look($pak_ref) }, # $cells->{ pack "ii", $p->[0], +$p->[1] } St2 => sub { st2_look($st2_ref) }, # $cells->{ join(':', @$p) } St3 => sub { st3_look($st3_ref) }, # $cells->{ $str } # optimized Str => sub { str_look($str_ref) }, # $cells->{ $p->[0] .':'. $p->[1 +] } };

Notice that stringification "@$p" reaches join(':', @$p) in later releases, 5.22+.

$ /opt/perl-5.8.9/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 6.05 usr + 0.00 sys = 6.05 CPU) @ 33057.85/s +(n=200000) Lan: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s +(n=200000) Mat: 7 wallclock secs ( 7.05 usr + 0.00 sys = 7.05 CPU) @ 28368.79/s +(n=200000) Pak: 6 wallclock secs ( 5.67 usr + 0.00 sys = 5.67 CPU) @ 35273.37/s +(n=200000) St2: 5 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s +(n=200000) St3: 2 wallclock secs ( 2.38 usr + 0.00 sys = 2.38 CPU) @ 84033.61/s +(n=200000) Str: 5 wallclock secs ( 4.90 usr + 0.00 sys = 4.90 CPU) @ 40816.33/s +(n=200000) $ /opt/perl-5.10.1/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 6.30 usr + 0.00 sys = 6.30 CPU) @ 31746.03/s +(n=200000) Lan: 5 wallclock secs ( 4.83 usr + 0.00 sys = 4.83 CPU) @ 41407.87/s +(n=200000) Mat: 8 wallclock secs ( 7.47 usr + 0.01 sys = 7.48 CPU) @ 26737.97/s +(n=200000) Pak: 6 wallclock secs ( 6.03 usr + 0.00 sys = 6.03 CPU) @ 33167.50/s +(n=200000) St2: 4 wallclock secs ( 4.46 usr + 0.00 sys = 4.46 CPU) @ 44843.05/s +(n=200000) St3: 3 wallclock secs ( 2.46 usr + 0.00 sys = 2.46 CPU) @ 81300.81/s +(n=200000) Str: 5 wallclock secs ( 5.05 usr + 0.00 sys = 5.05 CPU) @ 39603.96/s +(n=200000) $ /opt/perl-5.12.5/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 7 wallclock secs ( 6.21 usr + 0.01 sys = 6.22 CPU) @ 32154.34/s +(n=200000) Lan: 4 wallclock secs ( 4.85 usr + 0.00 sys = 4.85 CPU) @ 41237.11/s +(n=200000) Mat: 7 wallclock secs ( 7.36 usr + 0.01 sys = 7.37 CPU) @ 27137.04/s +(n=200000) Pak: 6 wallclock secs ( 5.90 usr + 0.00 sys = 5.90 CPU) @ 33898.31/s +(n=200000) St2: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s +(n=200000) St3: 3 wallclock secs ( 2.45 usr + 0.00 sys = 2.45 CPU) @ 81632.65/s +(n=200000) Str: 5 wallclock secs ( 5.04 usr + 0.00 sys = 5.04 CPU) @ 39682.54/s +(n=200000) $ /opt/perl-5.14.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 6.16 usr + 0.00 sys = 6.16 CPU) @ 32467.53/s +(n=200000) Lan: 5 wallclock secs ( 4.62 usr + 0.00 sys = 4.62 CPU) @ 43290.04/s +(n=200000) Mat: 7 wallclock secs ( 7.42 usr + 0.00 sys = 7.42 CPU) @ 26954.18/s +(n=200000) Pak: 6 wallclock secs ( 5.87 usr + 0.00 sys = 5.87 CPU) @ 34071.55/s +(n=200000) St2: 4 wallclock secs ( 4.38 usr + 0.00 sys = 4.38 CPU) @ 45662.10/s +(n=200000) St3: 3 wallclock secs ( 2.30 usr + 0.00 sys = 2.30 CPU) @ 86956.52/s +(n=200000) Str: 5 wallclock secs ( 5.04 usr + 0.00 sys = 5.04 CPU) @ 39682.54/s +(n=200000) $ /opt/perl-5.16.3/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 7 wallclock secs ( 6.70 usr + 0.01 sys = 6.71 CPU) @ 29806.26/s +(n=200000) Lan: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s +(n=200000) Mat: 7 wallclock secs ( 7.03 usr + 0.00 sys = 7.03 CPU) @ 28449.50/s +(n=200000) Pak: 6 wallclock secs ( 6.32 usr + 0.00 sys = 6.32 CPU) @ 31645.57/s +(n=200000) St2: 5 wallclock secs ( 4.43 usr + 0.00 sys = 4.43 CPU) @ 45146.73/s +(n=200000) St3: 2 wallclock secs ( 2.40 usr + 0.00 sys = 2.40 CPU) @ 83333.33/s +(n=200000) Str: 6 wallclock secs ( 5.45 usr + 0.01 sys = 5.46 CPU) @ 36630.04/s +(n=200000) $ /opt/perl-5.18.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 7 wallclock secs ( 6.82 usr + 0.00 sys = 6.82 CPU) @ 29325.51/s +(n=200000) Lan: 5 wallclock secs ( 5.00 usr + 0.00 sys = 5.00 CPU) @ 40000.00/s +(n=200000) Mat: 8 wallclock secs ( 7.64 usr + 0.00 sys = 7.64 CPU) @ 26178.01/s +(n=200000) Pak: 6 wallclock secs ( 6.30 usr + 0.00 sys = 6.30 CPU) @ 31746.03/s +(n=200000) St2: 5 wallclock secs ( 4.88 usr + 0.01 sys = 4.89 CPU) @ 40899.80/s +(n=200000) St3: 3 wallclock secs ( 2.56 usr + 0.00 sys = 2.56 CPU) @ 78125.00/s +(n=200000) Str: 6 wallclock secs ( 5.65 usr + 0.01 sys = 5.66 CPU) @ 35335.69/s +(n=200000) $ /opt/perl-5.20.3/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 7 wallclock secs ( 6.50 usr + 0.00 sys = 6.50 CPU) @ 30769.23/s +(n=200000) Lan: 5 wallclock secs ( 5.02 usr + 0.00 sys = 5.02 CPU) @ 39840.64/s +(n=200000) Mat: 7 wallclock secs ( 7.35 usr + 0.00 sys = 7.35 CPU) @ 27210.88/s +(n=200000) Pak: 7 wallclock secs ( 6.25 usr + 0.00 sys = 6.25 CPU) @ 32000.00/s +(n=200000) St2: 4 wallclock secs ( 4.61 usr + 0.00 sys = 4.61 CPU) @ 43383.95/s +(n=200000) St3: 3 wallclock secs ( 2.68 usr + 0.00 sys = 2.68 CPU) @ 74626.87/s +(n=200000) Str: 6 wallclock secs ( 5.63 usr + 0.00 sys = 5.63 CPU) @ 35523.98/s +(n=200000) $ /opt/perl-5.22.4/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 5.89 usr + 0.00 sys = 5.89 CPU) @ 33955.86/s +(n=200000) Lan: 5 wallclock secs ( 4.68 usr + 0.00 sys = 4.68 CPU) @ 42735.04/s +(n=200000) Mat: 6 wallclock secs ( 6.76 usr + 0.01 sys = 6.77 CPU) @ 29542.10/s +(n=200000) Pak: 6 wallclock secs ( 5.42 usr + 0.00 sys = 5.42 CPU) @ 36900.37/s +(n=200000) St2: 5 wallclock secs ( 4.75 usr + 0.00 sys = 4.75 CPU) @ 42105.26/s +(n=200000) St3: 2 wallclock secs ( 2.42 usr + 0.00 sys = 2.42 CPU) @ 82644.63/s +(n=200000) Str: 5 wallclock secs ( 4.84 usr + 0.00 sys = 4.84 CPU) @ 41322.31/s +(n=200000) $ /opt/perl-5.24.2/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 6.23 usr + 0.01 sys = 6.24 CPU) @ 32051.28/s +(n=200000) Lan: 5 wallclock secs ( 4.52 usr + 0.00 sys = 4.52 CPU) @ 44247.79/s +(n=200000) Mat: 7 wallclock secs ( 6.92 usr + 0.01 sys = 6.93 CPU) @ 28860.03/s +(n=200000) Pak: 5 wallclock secs ( 5.58 usr + 0.00 sys = 5.58 CPU) @ 35842.29/s +(n=200000) St2: 5 wallclock secs ( 4.53 usr + 0.00 sys = 4.53 CPU) @ 44150.11/s +(n=200000) St3: 2 wallclock secs ( 2.30 usr + 0.00 sys = 2.30 CPU) @ 86956.52/s +(n=200000) Str: 5 wallclock secs ( 4.74 usr + 0.01 sys = 4.75 CPU) @ 42105.26/s +(n=200000) $ /opt/perl-5.26.0/bin/perl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 6.04 usr + 0.01 sys = 6.05 CPU) @ 33057.85/s +(n=200000) Lan: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s +(n=200000) Mat: 7 wallclock secs ( 7.00 usr + 0.01 sys = 7.01 CPU) @ 28530.67/s +(n=200000) Pak: 6 wallclock secs ( 5.56 usr + 0.02 sys = 5.58 CPU) @ 35842.29/s +(n=200000) St2: 5 wallclock secs ( 4.71 usr + 0.02 sys = 4.73 CPU) @ 42283.30/s +(n=200000) St3: 2 wallclock secs ( 2.17 usr + 0.01 sys = 2.18 CPU) @ 91743.12/s +(n=200000) Str: 5 wallclock secs ( 4.78 usr + 0.01 sys = 4.79 CPU) @ 41753.65/s +(n=200000)

Results from cperl-5.24.2c.

$ /opt/cperl-5.24.2c/bin/cperl test.pl Benchmark: timing 200000 iterations of Big, Lan, Mat, Pak, St2, St3, S +tr... Big: 6 wallclock secs ( 5.58 usr + 0.01 sys = 5.59 CPU) @ 35778.18/s +(n=200000) Lan: 4 wallclock secs ( 4.47 usr + 0.00 sys = 4.47 CPU) @ 44742.73/s +(n=200000) Mat: 5 wallclock secs ( 5.98 usr + 0.00 sys = 5.98 CPU) @ 33444.82/s +(n=200000) Pak: 5 wallclock secs ( 5.35 usr + 0.01 sys = 5.36 CPU) @ 37313.43/s +(n=200000) St2: 4 wallclock secs ( 4.46 usr + 0.00 sys = 4.46 CPU) @ 44843.05/s +(n=200000) St3: 3 wallclock secs ( 2.09 usr + 0.00 sys = 2.09 CPU) @ 95693.78/s +(n=200000) Str: 4 wallclock secs ( 4.61 usr + 0.00 sys = 4.61 CPU) @ 43383.95/s +(n=200000)

Regards, Mario


In reply to Re: Fastest way to lookup a point in a set (compares Perl 5.8.9 - 5.26.0) by marioroy
in thread Fastest way to lookup a point in a set by eyepopslikeamosquito

Title:
Use:  <p> text here (a paragraph) </p>
and:  <code> code here </code>
to format your post; it's "PerlMonks-approved HTML":



  • Are you posting in the right place? Check out Where do I post X? to know for sure.
  • Posts may use any of the Perl Monks Approved HTML tags. Currently these include the following:
    <code> <a> <b> <big> <blockquote> <br /> <dd> <dl> <dt> <em> <font> <h1> <h2> <h3> <h4> <h5> <h6> <hr /> <i> <li> <nbsp> <ol> <p> <small> <strike> <strong> <sub> <sup> <table> <td> <th> <tr> <tt> <u> <ul>
  • Snippets of code should be wrapped in <code> tags not <pre> tags. In fact, <pre> tags should generally be avoided. If they must be used, extreme care should be taken to ensure that their contents do not have long lines (<70 chars), in order to prevent horizontal scrolling (and possible janitor intervention).
  • Want more info? How to link or How to display code and escape characters are good places to start.
Log In?
Username:
Password:

What's my password?
Create A New User
Domain Nodelet?
Chatterbox?
and the web crawler heard nothing...

How do I use this?Last hourOther CB clients
Other Users?
Others sharing their wisdom with the Monastery: (8)
As of 2024-04-19 07:22 GMT
Sections?
Information?
Find Nodes?
Leftovers?
    Voting Booth?

    No recent polls found