- PR -

perlで1/100000秒単位の正確な処理時間を計算したい

1
投稿者投稿内容
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-08-17 14:10
keiと申します。

perlスクリプトで、モジュールの処理時間を計測するのに、以下のようなコードを
書いているのですが、たまに$diff_timeがマイナス値になってしまったりします。
正確な処理時間を算出する方法って、他にもっとスマートな方法はありますでしょうか?

<CODE>
#システム時間取得(`00:00:00 1970-01-01 UTC' からの経過時間[秒] )
my $start_second = `date +"%s"`;#秒
my $start_second_nano = `date +"%N"`;#ナノ秒

★モジュール起動

#システム時間取得(`00:00:00 1970-01-01 UTC' からの経過時間[秒] )
my $end_second = `date +"%s"`;#秒
my $end_second_nano = `date +"%N"`;#ナノ秒

#経過時間計算
my $diff_second = $end_second - $start_second;
my $diff_second_nano = $end_second_nano - $start_second_nano;
my $diff_time_org = $diff_second + ($diff_second_nano / 1000000000);
$diff_time = sprintf("%.6f",$diff_time_org);

print "処理時間:$diff_time\n";

</CODE>
MMX
ぬし
会議室デビュー日: 2001/10/26
投稿数: 861
投稿日時: 2006-08-17 14:31
OSの割込み処理の精度として無理では 数msec はかかりますから。
リアルタイムOSでも 数10μsec かな。

MPU のハードはクロック基準の計時レジスタがあるが、一般向き?

パフォーマンス測定では、繰り返し実行して、その平均を取るのが普通です。
===================
あるいは、プロファイル用ソフトを導入して使う。perl用は?

[ メッセージ編集済み 編集者: MMX 編集日時 2006-08-17 14:42 ]
ちいにぃ
大ベテラン
会議室デビュー日: 2002/05/28
投稿数: 244
投稿日時: 2006-08-17 16:38
次のモジュールのいずれかが使えるかもしれません。

Time::HiRes - High resolution alarm, sleep, gettimeofday, interval timers - search.cpan.org

DateTime::HiRes - Create DateTime objects with sub-second current time resolution - search.cpan.org

ちなみに、これらは QueryPerformanceCounter perl - Google 検索 で検索して、
さらにThe CPAN Search Siteで検索して見つけました。
kei
ベテラン
会議室デビュー日: 2005/03/18
投稿数: 53
投稿日時: 2006-08-18 10:09
ちいにぃ様

ご回答ありがとうございます。
Time::HiResモジュールが使えそうですね。
ちょっといろいろ試してみたいと思います。

ありがとうございました。
1

スキルアップ/キャリアアップ(JOB@IT)