usage: clearallcache();
USAGE
sub clearallcache {
die usage if @_;
%Cache = ();
}
$_Usage{enablecache} = <<'USAGE';
usage: enablecache();
USAGE
sub enablecache {
die usage if @_;
$Do_Cache = 1;
}
$_Usage{disablecache} = <<'USAGE';
usage: disablecache();
USAGE
sub disablecache {
die usage if @_;
$Do_Cache = 0;
}
# --- Functions to process the 'time' data type
sub new { my @t = (mytime, times, @_ == 2 ? $_[1] : 0);
print STDERR "new=@t\n" if $Debug;
bless \@t; }
sub cpu_p { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $pu+$ps ; }
sub cpu_c { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $cu+$cs ; }
sub cpu_a { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $pu+$ps+$cu+$cs ; }
sub real { my($r,$pu,$ps,$cu,$cs) = @{$_[0]}; $r ; }
sub iters { $_[0]->[5] ; }
$_Usage{timediff} = <<'USAGE';
usage: $result_diff = timediff($result1, $result2);
USAGE
sub timediff {
my($a, $b) = @_;
die usage unless ref $a and ref $b;
my @r;
for (my $i=0; $i < @$a; ++$i) {
push(@r, $a->[$i] - $b->[$i]);
}
bless \@r;
}
$_Usage{timesum} = <<'USAGE';
usage: $sum = timesum($result1, $result2);
USAGE
sub timesum {
my($a, $b) = @_;
die usage unless ref $a and ref $b;
my @r;
for (my $i=0; $i < @$a; ++$i) {
push(@r, $a->[$i] + $b->[$i]);
}
bless \@r;
}
$_Usage{timestr} = <<'USAGE';
usage: $formatted_result = timestr($result1);
USAGE
sub timestr {
my($tr, $style, $f) = @_;
die usage unless ref $tr;
my @t = @$tr;
warn "bad time value (@t)" unless @t==6;
my($r, $pu, $ps, $cu, $cs, $n) = @t;
my($pt, $ct, $tt) = ($tr->cpu_p, $tr->cpu_c, $tr->cpu_a);
$f = $Default_Format unless defined $f;
# format a time in the required style, other formats may be added here
$style ||= $Default_Style;
return '' if $style eq 'none';
$style = ($ct>0) ? 'all' : 'noc' if $style eq 'auto';
my $s = "@t $style"; # default for unknown style
my $w = $hirestime ? "%2g" : "%2d";
$s=sprintf("$w wallclock secs (%$f usr %$f sys + %$f cusr %$f csys = %$f CPU)",
$r,$pu,$ps,$cu,$cs,$tt) if $style eq 'all';
$s=sprintf("$w wallclock secs (%$f usr + %$f sys = %$f CPU)",
$r,$pu,$ps,$pt) if $style eq 'noc';
$s=sprintf("$w wallclock secs (%$f cusr + %$f csys = %$f CPU)",
$r,$cu,$cs,$ct) if $style eq 'nop';
$s .= sprintf(" @ %$f/s (n=$n)", $n / ( $style eq 'nop' ? $cu + $cs : $pu + $ps ))
=6= |