|
Manpages BenchmarkSection: Perl Programmers Reference Guide (3perl)Updated: 2001-02-22 Index Return to Main Contents NAMEBenchmark - benchmark running times of Perl codeSYNOPSIS
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";
DESCRIPTIONThe Benchmark module encapsulates a number of routines to help you figure out how long it takes to execute some code.timethis - run a chunk of code several times timethese - run several chunks of code several times cmpthese - print results of timethese as a comparison chart timeit - run a chunk of code and see how long it goes countit - see how many times a chunk of code runs in a given time Methods
Standard ExportsThe following routines will be exported into your namespace if you use the Benchmark module:
Optional ExportsThe following routines will be exported into your namespace if you specifically ask that they be imported:
NOTESThe data is stored as a list of values from the time and times functions:
($real, $user, $system, $children_user, $children_system, $iters)
in seconds for the whole loop (not divided by the number of rounds).
The timing is done using time(3) and times(3). Code is executed in the caller's package. 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. The null loop times can be cached, the key being the number of rounds. The caching can be controlled using calls like these:
clearcache($key);
clearallcache();
disablecache();
enablecache();
Caching is off by default, as it can (usually slightly) decrease
accuracy and does not usually noticably affect runtimes.
EXAMPLESFor example,
use Benchmark;$x=3;cmpthese(-5,{a=>sub{$x*$x},b=>sub{$x**2}})
outputs something like this:
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% --
while
use Benchmark;
$x=3;
$r=timethese(-5,{a=>sub{$x*$x},b=>sub{$x**2}},'none');
cmpthese($r);
outputs something like this:
Rate b a
b 1559428/s -- -62%
a 4152037/s 166% --
INHERITANCEBenchmark inherits from no other class, except of course for Exporter.CAVEATSComparing 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.The real time timing is done using time(2) and the granularity is therefore only one second. Short tests may produce negative figures because perl can appear to take longer to execute the empty loop than a short test; try:
timethis(100,'1');
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 < 0.
SEE ALSODevel::DProf - a Perl code profilerAUTHORSJarkko Hietaniemi <jhi@iki.fi>, Tim Bunce <Tim.Bunce@ig.co.uk>MODIFICATION HISTORYSeptember 8th, 1994; by Tim Bunce.March 28th, 1997; by Hugo van der Sanden: added support for code references and the already documented 'debug' method; revamped documentation. April 04-07th, 1997: by Jarkko Hietaniemi, added the run-for-some-time functionality. 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()).
Index
This document was created by man2html, using the manual pages. Time: 04:18:36 GMT, May 21, 2026 |