■ Benchmark
Last Update: 2003--0-5- (Mon) 26: 1
Perl の処理速度を比較するために使用するモジュールです。複数の処理の処理速度を求めて比較できます。
URL デコードの二つを例にします。「Perlの小部屋」という文字列をデコードしています。
#! /usr/bin/perl
use Benchmark;
$count = 100000; $value = "Perl%E3%81%AE%E5%B0%8F%E9%83%A8%E5%B1%8B";
timethese($count, {'TEST1' => '&test1;', 'TEST2' => '&test2;', });
sub test1 { $str = $value; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("H2", $1 )/eg; }
sub test2 { $str = $value; $str =~ s/%([0-9A-Fa-f][0-9A-Fa-f])/pack("C", hex($1) )/eg; }
以下その結果です。TEST1 の方が処理速度が速い事がわかりました。
Benchmark: timing 100000 iterations of TEST1, TEST2...
TEST1: 13 wallclock secs (13.21 usr + 0.00 sys = 13.21 CPU) @ 7570.02/s (n=100000)
TEST2: 18 wallclock secs (16.88 usr + 0.00 sys = 16.88 CPU) @ 5924.17/s (n=100000)
3種類以上の処理の比較も可能です。
#! /usr/bin/perl
use Benchmark;
$count = 1000000; $wt = "Perlの小部屋";
timethese($count, {'TEST1' => '&test1;', 'TEST2' => '&test2;', 'TEST3' => '&test3;', 'TEST4' => '&test4;', });
sub test1 { print $wt . "\n"; }
sub test2 { print $wt; print "\n"; }
sub test3 { print <<_EOF_; $wt _EOF_ }
sub test4 { print STDOUT $wt; print STDOUT "\n"; }
ちなみに、上記の結果は以下の通りになりました。ほんの些細な違いですが、分けて書くほうが速いようですね。
Benchmark: timing 1000000 iterations of TEST1, TEST2, TEST3, TEST4...
TEST1: 5 wallclock secs ( 5.13 usr + 0.04 sys = 5.17 CPU) @ 193423.60/s (n=1000000)
TEST2: 6 wallclock secs ( 4.74 usr + 0.07 sys = 4.81 CPU) @ 207900.21/s (n=1000000)
TEST3: 5 wallclock secs ( 5.04 usr + 0.05 sys = 5.09 CPU) @ 196463.65/s (n=1000000)
TEST4: 5 wallclock secs ( 5.47 usr + 0.02 sys = 5.49 CPU) @ 182149.36/s (n=1000000)
Posted by Kyosuke Takayama at 2003-05-26 (Mon) 11:21 printable version