perlで速度うんぬんということのむなしさを maxで
404 Blog Not Found:perl - use List::Util; # for production codes
呼び出しているモジュールのソースコードを
直接呼んでみたが実行速度は桁違いに遅い。
ビルトイン呼び出し>ビルトインの一部呼び出し>全部ソースコード
の順。
はっきり言ってPerlで書いてある段階で十分遅い。
早くしたいならCで書いてPerlに組み込んで 最低限の呼び出しだけPerlで行えということかと。
Perlで書いてある時点で速度がかなりロスになる、そのロスになったPerlで速度を出そうと言うことがかなり徒労に感じる。
#!/usr/local/bin/perl use strict; use warnings; use Benchmark qw/timethese cmpthese/; use List::Util (); my $max = shift || 1000; my $count = shift || 0; my @shuffled = List::Util::shuffle( 1 .. $max ); sub reduce (&@) { my $code = shift; no strict 'refs'; return shift unless @_ > 1; use vars qw($a $b); my $caller = caller; local(*{$caller."::a"}) = \my $a; local(*{$caller."::b"}) = \my $b; $a = shift; foreach (@_) { $b = $_; $a = &{$code}(); } $a; } sub hand_max (@) { reduce { $a > $b ? $a : $b } @_ } sub qmax (@) { List::Util::reduce { $a > $b ? $a : $b } @_ } cmpthese( timethese( $count, { 'hand' => sub { hand_max(@shuffled) == $max or die }, 'List::Util::reduce' => sub { qmax(@shuffled) == $max or die }, 'List::Util' => sub { List::Util::max(@shuffled) == $max or die }, }));
Benchmark: running List::Util, List::Util::reduce, hand for at least 3 CPU seconds... List::Util: 4 wallclock secs ( 3.20 usr + 0.01 sys = 3.21 CPU) @ 25526.48/s (n=81940) List::Util::reduce: 3 wallclock secs ( 3.15 usr + 0.00 sys = 3.15 CPU) @ 3359.37/s (n=10582) hand: 3 wallclock secs ( 3.13 usr + 0.00 sys = 3.13 CPU) @ 902.56/s (n=2825) Rate hand List::Util::reduce List::Util hand 903/s -- -73% -96% List::Util::reduce 3359/s 272% -- -87% List::Util 25526/s 2728% 660% --
http://search.cpan.org/~gbarr/Scalar-List-Utils-1.19/lib/List/Util.pm
list::utilはここからひろったけど、これが古い?
Perlの事はよく分からないので、教えて偉い人