2014/06/14

Benchmark のお供に Devel::ModuleDumper

<ご注意>
ここで紹介するモジュールは、当初 Devel::ModInfo という名前でしたが、そのモジュール名は CPAN 上にすでに存在していたので、Devel::ModuleDumper に改名しました。打消しになっているのはそういう理由です今後は Devel::ModuleDumper でよろしくお願いします。
</ご注意>

ずいぶんあたたかくなってきて、寒さにめっぽう弱い自分としては本当に助かる今日この頃ですがみなさんいかがお過ごしですか。僕は先日、自家製ガスパチョに感動しました。暑くなるとうまいものってありますよね 🍺

Devel::ModuleDumper

さて、Devel::ModInfo Devel::ModuleDumper というモジュールを書いてみました。なんかのスクリプトを実行したとき、END フェーズで、よしなにロードしてるモジュール一覧とバージョンを表示するものです。

$ perl -d:ModuleDumper -MData::Dumper -e 'print "foo!\n"'
foo!
Perl 5.012002
Carp 1.17
Data::Dumper 2.125
Exporter 5.64_01

おそらく、夏とガスパチョのごとく、ベンチマークスクリプトと相性が良いです。

[crypt_benchmark.pl]

use strict;
use warnings;

use Benchmarks sub {

    use Digest::HMAC_SHA1 qw(hmac_sha1_hex);
    use Digest::HMAC_MD5 qw(hmac_md5_hex);

    my $STR = '@test123';
    my $KEY = 'ABC';

    {
        'hmac_sha1' => sub { hmac_sha1_hex($STR, $KEY); },
        'hmac_md5'  => sub { hmac_md5_hex($STR, $KEY); },
        'crypt'     => sub { crypt($STR, $KEY); },
    };
};

上記のようなベンチマークスクリプトがあったとして、以下のような出力になります。

$ perl -d:ModuleDumper crypt_benchmark.pl
Benchmark: running crypt, hmac_md5, hmac_sha1 for at least 1 CPU seconds...
     crypt:  1 wallclock secs ( 1.06 usr +  0.00 sys =  1.06 CPU) @ 108196.23/s (n=114688)
  hmac_md5:  1 wallclock secs ( 1.10 usr +  0.00 sys =  1.10 CPU) @ 195490.00/s (n=215039)
 hmac_sha1:  1 wallclock secs ( 1.03 usr +  0.00 sys =  1.03 CPU) @ 111346.60/s (n=114687)
              Rate     crypt hmac_sha1  hmac_md5
crypt     108196/s        --       -3%      -45%
hmac_sha1 111347/s        3%        --      -43%
hmac_md5  195490/s       81%       76%        --
Perl    5.012002
Benchmarks      0.05
Carp    1.17
Digest::base    1.16
Digest::HMAC    1.03
Digest::HMAC_MD5        1.01
Digest::HMAC_SHA1       1.03
Digest::MD5     2.39
Digest::SHA     5.47
Exporter        5.64_01
Exporter::Heavy 5.64_01
MIME::Base64    3.08
Time::HiRes     1.9719

ベンチマーク結果の後の、「Perl 5.012002」の行以降が、Devel::ModInfo Devel::ModuleDumper によるものです。

際どいベンチマークの時、バージョンが問題になったりしやすいので、簡単に付与できると良さそうだなあということで書いてみました(必要になった時に手で書いても大したものではないですが)。取り急ぎベンチマークスクリプト以外にもなんでも使えるので試してみてください。

ではでは。

サイト内検索