Created
April 11, 2011 21:27
-
-
Save chansen/914390 to your computer and use it in GitHub Desktop.
Comparison of hash objects with packed objects (SvPV)
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/opt/perl/5.13.11/bin/perl packed_vs_hash.pl | |
Benchmarking constructor | |
Rate hash pack | |
hash 445987/s -- -10% | |
pack 496264/s 11% -- | |
Benchmarking accessor | |
Rate vec hash | |
vec 1190203/s -- -9% | |
hash 1308227/s 10% -- | |
Benchmarking accessor (list of multiple attributes) | |
Rate hash unpack | |
hash 719228/s -- -6% | |
unpack 762286/s 6% -- | |
/opt/perl/5.12.3/bin/perl packed_vs_hash.pl | |
Benchmarking constructor | |
Rate hash pack | |
hash 437788/s -- -10% | |
pack 487507/s 11% -- | |
Benchmarking accessor | |
Rate vec hash | |
vec 1135525/s -- -4% | |
hash 1184835/s 4% -- | |
Benchmarking accessor (list of multiple attributes) | |
Rate hash unpack | |
hash 675164/s -- -9% | |
unpack 739499/s 10% -- | |
/opt/perl/5.10.1/bin/perl packed_vs_hash.pl | |
Benchmarking constructor | |
Rate hash pack | |
hash 433194/s -- -8% | |
pack 468559/s 8% -- | |
Benchmarking accessor | |
Rate vec hash | |
vec 1145795/s -- -4% | |
hash 1189297/s 4% -- | |
Benchmarking accessor (list of multiple attributes) | |
Rate hash unpack | |
hash 695712/s -- -6% | |
unpack 740601/s 6% -- | |
/opt/perl/5.8.9/bin/perl packed_vs_hash.pl | |
Benchmarking constructor | |
Rate hash pack | |
hash 413896/s -- -12% | |
pack 469801/s 14% -- | |
Benchmarking accessor | |
Rate vec hash | |
vec 1105099/s -- -4% | |
hash 1148337/s 4% -- | |
Benchmarking accessor (list of multiple attributes) | |
Rate hash unpack | |
hash 659439/s -- -2% | |
unpack 675623/s 2% -- | |
/opt/perl/5.6.2/bin/perl packed_vs_hash.pl | |
Benchmarking constructor | |
Benchmark: running hash, pack, each for at least 10 CPU seconds... | |
hash: 11 wallclock secs (10.53 usr + 0.16 sys = 10.69 CPU) @ 442920.95/s (n=4734825) | |
pack: 11 wallclock secs (10.16 usr + 0.16 sys = 10.32 CPU) @ 525622.29/s (n=5424422) | |
Rate hash pack | |
hash 442921/s -- -16% | |
pack 525622/s 19% -- | |
Benchmarking accessor | |
Benchmark: running hash, vec, each for at least 10 CPU seconds... | |
hash: 10 wallclock secs ( 9.95 usr + 0.10 sys = 10.05 CPU) @ 1414538.91/s (n=14216116) | |
vec: 11 wallclock secs (10.56 usr + 0.18 sys = 10.74 CPU) @ 1293750.65/s (n=13894882) | |
Rate vec hash | |
vec 1293751/s -- -9% | |
hash 1414539/s 9% -- | |
Benchmarking accessor (list of multiple attributes) | |
Benchmark: running hash, unpack, each for at least 10 CPU seconds... | |
hash: 11 wallclock secs (10.41 usr + 0.14 sys = 10.55 CPU) @ 753014.12/s (n=7944299) | |
unpack: 11 wallclock secs (10.17 usr + 0.12 sys = 10.29 CPU) @ 814110.88/s (n=8377201) | |
Rate hash unpack | |
hash 753014/s -- -8% | |
unpack 814111/s 8% -- |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/perl | |
use strict; | |
use warnings; | |
{ | |
package MyVec; | |
sub new { | |
my ($class, $y, $m, $d) = @_; | |
return bless \pack('nCC', $y, $m, $d), $class; | |
} | |
sub year { | |
my ($self) = @_; | |
return vec($$self, 0, 16); | |
} | |
sub month { | |
my ($self) = @_; | |
return vec($$self, 2, 8); | |
} | |
sub day { | |
my ($self) = @_; | |
return vec($$self, 3, 8); | |
} | |
sub ymd { | |
my ($self) = @_; | |
return unpack('nCC', $$self); | |
} | |
} | |
{ | |
package MyHash; | |
sub new { | |
my ($class, $y, $m, $d) = @_; | |
return bless { | |
year => $y, | |
month => $m, | |
day => $d, | |
}, $class; | |
} | |
sub year { | |
my ($self) = @_; | |
return $self->{year}; | |
} | |
sub month { | |
my ($self) = @_; | |
return $self->{month}; | |
} | |
sub day { | |
my ($self) = @_; | |
return $self->{month}; | |
} | |
sub ymd { | |
my ($self) = @_; | |
return @$self{qw(year month day)}; | |
} | |
} | |
use Benchmark qw[]; | |
print "Benchmarking constructor\n"; | |
Benchmark::cmpthese( -10, { | |
'pack' => sub { | |
my $vobj = MyVec->new(2009, 10, 12); | |
}, | |
'hash' => sub { | |
my $hobj = MyHash->new(2009, 10, 12); | |
}, | |
}); | |
print "\nBenchmarking accessor\n"; | |
my ($vobj, $hobj) = map { $_->new(2009, 10, 12) } qw(MyVec MyHash); | |
Benchmark::cmpthese( -10, { | |
'vec' => sub { | |
my $m = $vobj->month; | |
}, | |
'hash' => sub { | |
my $m = $hobj->month; | |
}, | |
}); | |
print "\nBenchmarking accessor (list of multiple attributes)\n"; | |
Benchmark::cmpthese( -10, { | |
'unpack' => sub { | |
my ($y, $m, $d) = $vobj->ymd; | |
}, | |
'hash' => sub { | |
my ($y, $m, $d) = $hobj->ymd; | |
}, | |
}); | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment