argra****@users*****
argra****@users*****
2009年 6月 21日 (日) 02:54:47 JST
Index: docs/modules/Benchmark-1.10/Benchmark.pod diff -u /dev/null docs/modules/Benchmark-1.10/Benchmark.pod:1.1 --- /dev/null Sun Jun 21 02:54:47 2009 +++ docs/modules/Benchmark-1.10/Benchmark.pod Sun Jun 21 02:54:47 2009 @@ -0,0 +1,974 @@ + +=encoding euc-jp + +=head1 NAME + +=begin original + +Benchmark - benchmark running times of Perl code + +=end original + +Benchmark - Perl コードの実行時間のベンチマークを行なう + +=head1 SYNOPSIS + + use Benchmark qw(:all) ; + + timethis ($count, "code"); + + # Use Perl code in strings... + timethese($count, { + 'Name1' => '...code1...', + 'Name2' => '...code2...', + }); + + # ... or use subroutine references. + timethese($count, { + 'Name1' => sub { ...code1... }, + 'Name2' => sub { ...code2... }, + }); + + # cmpthese can be used both ways as well + cmpthese($count, { + 'Name1' => '...code1...', + 'Name2' => '...code2...', + }); + + cmpthese($count, { + 'Name1' => sub { ...code1... }, + 'Name2' => sub { ...code2... }, + }); + + # ...or in two stages + $results = timethese($count, + { + 'Name1' => sub { ...code1... }, + 'Name2' => sub { ...code2... }, + }, + 'none' + ); + cmpthese( $results ) ; + + $t = timeit($count, '...other code...') + print "$count loops of other code took:",timestr($t),"\n"; + + $t = countit($time, '...other code...') + $count = $t->iters ; + print "$count loops of other code took:",timestr($t),"\n"; + + # enable hires wallclock timing if possible + use Benchmark ':hireswallclock'; + +=head1 DESCRIPTION + +=begin original + +The Benchmark module encapsulates a number of routines to help you +figure out how long it takes to execute some code. + +=end original + +Benchmark モジュールは、コードの実行時間を計測する手助けをするルーチン群を +カプセル化するものです。 + +=begin original + +timethis - run a chunk of code several times + +=end original + +timethis - コードを何回か実行する + +=begin original + +timethese - run several chunks of code several times + +=end original + +timethese - いくつかのコードを何回か実行する + +=begin original + +cmpthese - print results of timethese as a comparison chart + +=end original + +cmpthese - timethese の結果を比較表として表示する + +=begin original + +timeit - run a chunk of code and see how long it goes + +=end original + +timeit - コードを実行し、時間を計測する + +=begin original + +countit - see how many times a chunk of code runs in a given time + +=end original + +countit - コードの塊を与えられた時間内に何回実行できるかを調べる + +=head2 Methods + +(メソッド) + +=over 10 + +=item new + +=begin original + +Returns the current time. Example: + +=end original + +現在時刻を返します。 +例えば: + + use Benchmark; + $t0 = new Benchmark; + # ... your code here ... + $t1 = new Benchmark; + $td = timediff($t1, $t0); + print "the code took:",timestr($td),"\n"; + +=item debug + +=begin original + +Enables or disable debugging by setting the C<$Benchmark::Debug> flag: + +=end original + +C<$Benchmark::debug> フラグを設定することによって、デバッグを許可したり、 +許可を解除したりします: + + debug Benchmark 1; + $t = timeit(10, ' 5 ** $Global '); + debug Benchmark 0; + +=item iters + +=begin original + +Returns the number of iterations. + +=end original + +繰り返し回数を返します。 + +=back + +=head2 Standard Exports + +=begin original + +The following routines will be exported into your namespace +if you use the Benchmark module: + +=end original + +以下のルーチンは、Benchmark モジュールを使うときに、現在の名前空間へ +エクスポートされます: + +=over 10 + +=item timeit(COUNT, CODE) + +=begin original + +Arguments: COUNT is the number of times to run the loop, and CODE is +the code to run. CODE may be either a code reference or a string to +be eval'd; either way it will be run in the caller's package. + +=end original + +引数: COUNT は、ループの実行回数で、CODE は実行するコードです。 +CODE は、コードリファレンスか eval される文字列のどちらかです; +どちらの場合も呼び出し側のパッケージで実行されます。 + +=begin original + +Returns: a Benchmark object. + +=end original + +返り値: Benchmark オブジェクトを返します。 + +=item timethis ( COUNT, CODE, [ TITLE, [ STYLE ]] ) + +=begin original + +Time COUNT iterations of CODE. CODE may be a string to eval or a +code reference; either way the CODE will run in the caller's package. +Results will be printed to STDOUT as TITLE followed by the times. +TITLE defaults to "timethis COUNT" if none is provided. STYLE +determines the format of the output, as described for timestr() below. + +=end original + +Time COUNT iterations of CODE. CODE may be a string to eval or a +code reference; either way the CODE will run in the caller's package. +Results will be printed to STDOUT as TITLE followed by the times. +TITLE defaults to "timethis COUNT" if none is provided. STYLE +determines the format of the output, as described for timestr() below. +(TBT) + +=begin original + +The COUNT can be zero or negative: this means the I<minimum number of +CPU seconds> to run. A zero signifies the default of 3 seconds. For +example to run at least for 10 seconds: + +=end original + +The COUNT can be zero or negative: this means the I<minimum number of +CPU seconds> to run. A zero signifies the default of 3 seconds. For +example to run at least for 10 seconds: +(TBT) + + timethis(-10, $code) + +=begin original + +or to run two pieces of code tests for at least 3 seconds: + +=end original + +or to run two pieces of code tests for at least 3 seconds: +(TBT) + + timethese(0, { test1 => '...', test2 => '...'}) + +=begin original + +CPU seconds is, in UNIX terms, the user time plus the system time of +the process itself, as opposed to the real (wallclock) time and the +time spent by the child processes. Less than 0.1 seconds is not +accepted (-0.01 as the count, for example, will cause a fatal runtime +exception). + +=end original + +CPU seconds is, in UNIX terms, the user time plus the system time of +the process itself, as opposed to the real (wallclock) time and the +time spent by the child processes. Less than 0.1 seconds is not +accepted (-0.01 as the count, for example, will cause a fatal runtime +exception). +(TBT) + +=begin original + +Note that the CPU seconds is the B<minimum> time: CPU scheduling and +other operating system factors may complicate the attempt so that a +little bit more time is spent. The benchmark output will, however, +also tell the number of C<$code> runs/second, which should be a more +interesting number than the actually spent seconds. + +=end original + +Note that the CPU seconds is the B<minimum> time: CPU scheduling and +other operating system factors may complicate the attempt so that a +little bit more time is spent. The benchmark output will, however, +also tell the number of C<$code> runs/second, which should be a more +interesting number than the actually spent seconds. +(TBT) + +=begin original + +Returns a Benchmark object. + +=end original + +Benchmark オブジェクトを返します。 + +=item timethese ( COUNT, CODEHASHREF, [ STYLE ] ) + +=begin original + +The CODEHASHREF is a reference to a hash containing names as keys +and either a string to eval or a code reference for each value. +For each (KEY, VALUE) pair in the CODEHASHREF, this routine will +call + +=end original + +The CODEHASHREF is a reference to a hash containing names as keys +and either a string to eval or a code reference for each value. +For each (KEY, VALUE) pair in the CODEHASHREF, this routine will +call +(TBT) + + timethis(COUNT, VALUE, KEY, STYLE) + +=begin original + +The routines are called in string comparison order of KEY. + +=end original + +このルーチンは KEY の文字列比較順で呼び出されます。 + +=begin original + +The COUNT can be zero or negative, see timethis(). + +=end original + +COUNT は 0 や負数になることがあります; timethis() を参照してください。 + +=begin original + +Returns a hash reference of Benchmark objects, keyed by name. + +=end original + +名前をキーとした、Benchmark オブジェクトのハッシュリファレンスを返します。 + +=item timediff ( T1, T2 ) + +=begin original + +Returns the difference between two Benchmark times as a Benchmark +object suitable for passing to timestr(). + +=end original + +Returns the difference between two Benchmark times as a Benchmark +object suitable for passing to timestr(). +(TBT) + +=item timestr ( TIMEDIFF, [ STYLE, [ FORMAT ] ] ) + +=begin original + +Returns a string that formats the times in the TIMEDIFF object in +the requested STYLE. TIMEDIFF is expected to be a Benchmark object +similar to that returned by timediff(). + +=end original + +Returns a string that formats the times in the TIMEDIFF object in +the requested STYLE. TIMEDIFF is expected to be a Benchmark object +similar to that returned by timediff(). +(TBT) + +=begin original + +STYLE can be any of 'all', 'none', 'noc', 'nop' or 'auto'. 'all' shows +each of the 5 times available ('wallclock' time, user time, system time, +user time of children, and system time of children). 'noc' shows all +except the two children times. 'nop' shows only wallclock and the +two children times. 'auto' (the default) will act as 'all' unless +the children times are both zero, in which case it acts as 'noc'. +'none' prevents output. + +=end original + +STYLE can be any of 'all', 'none', 'noc', 'nop' or 'auto'. 'all' shows +each of the 5 times available ('wallclock' time, user time, system time, +user time of children, and system time of children). 'noc' shows all +except the two children times. 'nop' shows only wallclock and the +two children times. 'auto' (the default) will act as 'all' unless +the children times are both zero, in which case it acts as 'noc'. +'none' prevents output. +(TBT) + +=begin original + +FORMAT is the L<printf(3)>-style format specifier (without the +leading '%') to use to print the times. It defaults to '5.2f'. + +=end original + +FORMAT is the L<printf(3)>-style format specifier (without the +leading '%') to use to print the times. It defaults to '5.2f'. +(TBT) + +=back + +=head2 Optional Exports + +=begin original + +The following routines will be exported into your namespace +if you specifically ask that they be imported: + +=end original + +以下のルーチンは、明示的にインポートを要求することで、現在の名前空間へ +エクスポートされます: + +=over 10 + +=item clearcache ( COUNT ) + +=begin original + +Clear the cached time for COUNT rounds of the null loop. + +=end original + +Clear the cached time for COUNT rounds of the null loop. +(TBT) + +=item clearallcache ( ) + +=begin original + +Clear all cached times. + +=end original + +全てのキャッシュされた時間をクリアします。 + +=item cmpthese ( COUNT, CODEHASHREF, [ STYLE ] ) + +=item cmpthese ( RESULTSHASHREF, [ STYLE ] ) + +=begin original + +Optionally calls timethese(), then outputs comparison chart. This: + +=end original + +Optionally calls timethese(), then outputs comparison chart. This: +(TBT) + + cmpthese( -1, { a => "++\$i", b => "\$i *= 2" } ) ; + +=begin original + +outputs a chart like: + +=end original + +以下のような表を出力します: + + Rate b a + b 2831802/s -- -61% + a 7208959/s 155% -- + +=begin original + +This chart is sorted from slowest to fastest, and shows the percent speed +difference between each pair of tests. + +=end original + +This chart is sorted from slowest to fastest, and shows the percent speed +difference between each pair of tests. +(TBT) + +=begin original + +c<cmpthese> can also be passed the data structure that timethese() returns: + +=end original + +c<cmpthese> can also be passed the data structure that timethese() returns: +(TBT) + + $results = timethese( -1, { a => "++\$i", b => "\$i *= 2" } ) ; + cmpthese( $results ); + +=begin original + +in case you want to see both sets of results. +If the first argument is an unblessed hash reference, +that is RESULTSHASHREF; otherwise that is COUNT. + +=end original + +in case you want to see both sets of results. +If the first argument is an unblessed hash reference, +that is RESULTSHASHREF; otherwise that is COUNT. +(TBT) + +=begin original + +Returns a reference to an ARRAY of rows, each row is an ARRAY of cells from the +above chart, including labels. This: + +=end original + +Returns a reference to an ARRAY of rows, each row is an ARRAY of cells from the +above chart, including labels. This: +(TBT) + + my $rows = cmpthese( -1, { a => '++$i', b => '$i *= 2' }, "none" ); + +=begin original + +returns a data structure like: + +=end original + +というのは以下のようなデータ構造を返します: + + [ + [ '', 'Rate', 'b', 'a' ], + [ 'b', '2885232/s', '--', '-59%' ], + [ 'a', '7099126/s', '146%', '--' ], + ] + +=begin original + +B<NOTE>: This result value differs from previous versions, which returned +the C<timethese()> result structure. If you want that, just use the two +statement C<timethese>...C<cmpthese> idiom shown above. + +=end original + +B<NOTE>: This result value differs from previous versions, which returned +the C<timethese()> result structure. If you want that, just use the two +statement C<timethese>...C<cmpthese> idiom shown above. +(TBT) + +=begin original + +Incidently, note the variance in the result values between the two examples; +this is typical of benchmarking. If this were a real benchmark, you would +probably want to run a lot more iterations. + +=end original + +Incidently, note the variance in the result values between the two examples; +this is typical of benchmarking. If this were a real benchmark, you would +probably want to run a lot more iterations. +(TBT) + +=item countit(TIME, CODE) + +=begin original + +Arguments: TIME is the minimum length of time to run CODE for, and CODE is +the code to run. CODE may be either a code reference or a string to +be eval'd; either way it will be run in the caller's package. + +=end original + +Arguments: TIME is the minimum length of time to run CODE for, and CODE is +the code to run. CODE may be either a code reference or a string to +be eval'd; either way it will be run in the caller's package. +(TBT) + +=begin original + +TIME is I<not> negative. countit() will run the loop many times to +calculate the speed of CODE before running it for TIME. The actual +time run for will usually be greater than TIME due to system clock +resolution, so it's best to look at the number of iterations divided +by the times that you are concerned with, not just the iterations. + +=end original + +TIME is I<not> negative. countit() will run the loop many times to +calculate the speed of CODE before running it for TIME. The actual +time run for will usually be greater than TIME due to system clock +resolution, so it's best to look at the number of iterations divided +by the times that you are concerned with, not just the iterations. +(TBT) + +=begin original + +Returns: a Benchmark object. + +=end original + +返り値: Benchmark オブジェクトです。 + +=item disablecache ( ) + +=begin original + +Disable caching of timings for the null loop. This will force Benchmark +to recalculate these timings for each new piece of code timed. + +=end original + +Disable caching of timings for the null loop. This will force Benchmark +to recalculate these timings for each new piece of code timed. +(TBT) + +=item enablecache ( ) + +=begin original + +Enable caching of timings for the null loop. The time taken for COUNT +rounds of the null loop will be calculated only once for each +different COUNT used. + +=end original + +Enable caching of timings for the null loop. The time taken for COUNT +rounds of the null loop will be calculated only once for each +different COUNT used. +(TBT) + +=item timesum ( T1, T2 ) + +=begin original + +Returns the sum of two Benchmark times as a Benchmark object suitable +for passing to timestr(). + +=end original + +Returns the sum of two Benchmark times as a Benchmark object suitable +for passing to timestr(). +(TBT) + +=back + +=head2 :hireswallclock + +=begin original + +If the Time::HiRes module has been installed, you can specify the +special tag C<:hireswallclock> for Benchmark (if Time::HiRes is not +available, the tag will be silently ignored). This tag will cause the +wallclock time to be measured in microseconds, instead of integer +seconds. Note though that the speed computations are still conducted +in CPU time, not wallclock time. + +=end original + +If the Time::HiRes module has been installed, you can specify the +special tag C<:hireswallclock> for Benchmark (if Time::HiRes is not +available, the tag will be silently ignored). This tag will cause the +wallclock time to be measured in microseconds, instead of integer +seconds. Note though that the speed computations are still conducted +in CPU time, not wallclock time. +(TBT) + +=head1 NOTES + +(注意) + +=begin original + +The data is stored as a list of values from the time and times +functions: + +=end original + +データは、time 関数や times 関数による値のリストとして: + + ($real, $user, $system, $children_user, $children_system, $iters) + +=begin original + +in seconds for the whole loop (not divided by the number of rounds). + +=end original + +(各々の繰り返しごとではなく) ループ全体を秒数で計測して蓄えられます。 + +=begin original + +The timing is done using time(3) and times(3). + +=end original + +計時は、time(3) と times(3) を使って行なわれます。 + +=begin original + +Code is executed in the caller's package. + +=end original + +コードは、呼び出し元のパッケージで実行されます。 + +=begin original + +The time of the null loop (a loop with the same +number of rounds but empty loop body) is subtracted +from the time of the real loop. + +=end original + +空ループ (繰り返し数は同じですが、空のループ) の時間が、実際のループの +時間から差し引かれます。 + +=begin original + +The null loop times can be cached, the key being the +number of rounds. The caching can be controlled using +calls like these: + +=end original + +計算された空ループの実行時間は、繰り返しの数をキーとして、 +キャッシングされます。 +キャッシングは、以下のようなサブルーチンの呼び出しで制御できます: + + clearcache($key); + clearallcache(); + + disablecache(); + enablecache(); + +=begin original + +Caching is off by default, as it can (usually slightly) decrease +accuracy and does not usually noticably affect runtimes. + +=end original + +Caching is off by default, as it can (usually slightly) decrease +accuracy and does not usually noticably affect runtimes. +(TBT) + +=head1 EXAMPLES + +(例) + +=begin original + +For example, + +=end original + +例えば、 + + use Benchmark qw( cmpthese ) ; + $x = 3; + cmpthese( -5, { + a => sub{$x*$x}, + b => sub{$x**2}, + } ); + +=begin original + +outputs something like this: + +=end original + +とすると、以下のようなものが出力されます: + + Benchmark: running a, b, each for at least 5 CPU seconds... + Rate b a + b 1559428/s -- -62% + a 4152037/s 166% -- + + +=begin original + +while + +=end original + +一方 + + use Benchmark qw( timethese cmpthese ) ; + $x = 3; + $r = timethese( -5, { + a => sub{$x*$x}, + b => sub{$x**2}, + } ); + cmpthese $r; + +=begin original + +outputs something like this: + +=end original + +は以下のようなものが出力されます: + + Benchmark: running a, b, each for at least 5 CPU seconds... + a: 10 wallclock secs ( 5.14 usr + 0.13 sys = 5.27 CPU) @ 3835055.60/s (n=20210743) + b: 5 wallclock secs ( 5.41 usr + 0.00 sys = 5.41 CPU) @ 1574944.92/s (n=8520452) + Rate b a + b 1574945/s -- -59% + a 3835056/s 144% -- + +=head1 INHERITANCE + +(継承) + +=begin original + +Benchmark inherits from no other class, except of course +for Exporter. + +=end original + +Benchmark は、Exporter からは当然継承を行なっていますが、その他の +クラスからは継承を行ないません。 + +=head1 CAVEATS + +=begin original + +Comparing eval'd strings with code references will give you +inaccurate results: a code reference will show a slightly slower +execution time than the equivalent eval'd string. + +=end original + +Comparing eval'd strings with code references will give you +inaccurate results: a code reference will show a slightly slower +execution time than the equivalent eval'd string. +(TBT) + +=begin original + +The real time timing is done using time(2) and +the granularity is therefore only one second. + +=end original + +実際の時間の計時は、time(2) を使って行なわれますので、精度は +秒程度しかありません。 + +=begin original + +Short tests may produce negative figures because perl +can appear to take longer to execute the empty loop +than a short test; try: + +=end original + +perl では、空ループの方が短いテストよりも時間がかかる場合があるので、 +短いテストでは、結果が負数になる場合があります; +以下のようにしてみてください: + + timethis(100,'1'); + +=begin original + +The system time of the null loop might be slightly +more than the system time of the loop with the actual +code and therefore the difference might end up being E<lt> 0. + +=end original + +空ループのシステム時間は、実際のコードを含むループのシステム時間よりも +多少多くかかることがあるため、最終的に差がゼロより小さくなることが +あるのです。 + +=head1 SEE ALSO + +=begin original + +L<Devel::DProf> - a Perl code profiler + +=end original + +L<Devel::DProf> - a Perl コードプロファイラ + +=head1 AUTHORS + +=begin original + +Jarkko Hietaniemi <F<jhi****@iki*****>>, Tim Bunce <F<Tim.B****@ig*****>> + +=end original + +Jarkko Hietaniemi <F<jhi****@iki*****>>, Tim Bunce <F<Tim.B****@ig*****>> + +=head1 MODIFICATION HISTORY + +=begin original + +September 8th, 1994; by Tim Bunce. + +=end original + +September 8th, 1994; by Tim Bunce. +(TBT) + +=begin original + +March 28th, 1997; by Hugo van der Sanden: added support for code +references and the already documented 'debug' method; revamped +documentation. + +=end original + +March 28th, 1997; by Hugo van der Sanden: added support for code +references and the already documented 'debug' method; revamped +documentation. +(TBT) + +=begin original + +April 04-07th, 1997: by Jarkko Hietaniemi, added the run-for-some-time +functionality. + +=end original + +April 04-07th, 1997: by Jarkko Hietaniemi, added the run-for-some-time +functionality. +(TBT) + +=begin original + +September, 1999; by Barrie Slaymaker: math fixes and accuracy and +efficiency tweaks. Added cmpthese(). A result is now returned from +timethese(). Exposed countit() (was runfor()). + +=end original + +September, 1999; by Barrie Slaymaker: math fixes and accuracy and +efficiency tweaks. Added cmpthese(). A result is now returned from +timethese(). Exposed countit() (was runfor()). +(TBT) + +=begin original + +December, 2001; by Nicholas Clark: make timestr() recognise the style 'none' +and return an empty string. If cmpthese is calling timethese, make it pass the +style in. (so that 'none' will suppress output). Make sub new dump its +debugging output to STDERR, to be consistent with everything else. +All bugs found while writing a regression test. + +=end original + +December, 2001; by Nicholas Clark: make timestr() recognise the style 'none' +and return an empty string. If cmpthese is calling timethese, make it pass the +style in. (so that 'none' will suppress output). Make sub new dump its +debugging output to STDERR, to be consistent with everything else. +All bugs found while writing a regression test. +(TBT) + +=begin original + +September, 2002; by Jarkko Hietaniemi: add ':hireswallclock' special tag. + +=end original + +September, 2002; by Jarkko Hietaniemi: add ':hireswallclock' special tag. +(TBT) + +=begin original + +February, 2004; by Chia-liang Kao: make cmpthese and timestr use time +statistics for children instead of parent when the style is 'nop'. + +=end original + +February, 2004; by Chia-liang Kao: make cmpthese and timestr use time +statistics for children instead of parent when the style is 'nop'. +(TBT) + +=begin original + +November, 2007; by Christophe Grosjean: make cmpthese and timestr compute +time consistently with style argument, default is 'all' not 'noc' any more. + +=end original + +November, 2007; by Christophe Grosjean: make cmpthese and timestr compute +time consistently with style argument, default is 'all' not 'noc' any more. +(TBT) + +=cut +