aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteve Bennett <steveb@workware.net.au>2020-06-11 09:02:00 +1000
committerSteve Bennett <steveb@workware.net.au>2023-02-13 10:44:09 +1000
commit3d159dad2b93ab3033224edf2d29f7602a955e3e (patch)
treee5e57ea34e3973bf36977c3465cae48a9f75d89c
parentd8f305d19fd51e5e8b668819116f513d47608d7e (diff)
downloadjimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.zip
jimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.tar.gz
jimtcl-3d159dad2b93ab3033224edf2d29f7602a955e3e.tar.bz2
improvements to tools/benchtable.tcl
Handles decimal times Better formatting. Still need to avoid duplication with bench.tcl Signed-off-by: Steve Bennett <steveb@workware.net.au>
-rw-r--r--tools/benchtable.tcl45
1 files changed, 43 insertions, 2 deletions
diff --git a/tools/benchtable.tcl b/tools/benchtable.tcl
index 1ac9583..0f686d7 100644
--- a/tools/benchtable.tcl
+++ b/tools/benchtable.tcl
@@ -5,6 +5,40 @@
# Copyright (C) 2005 Pat Thoyts <patthoyts@users.sourceforge.net>
#
+proc changed_amount {firstvalue v} {
+ set x [expr {($v + 0.0) / $firstvalue}]
+ if {$x >= 0.99 && $x <= 1.01} {
+ set val .
+ } elseif {$v > $firstvalue} {
+ set p [expr {(($v - $firstvalue) * 100.0) / $firstvalue}]
+ set val [format "%+3.0f" $p]%
+ } else {
+ set p [expr {(($firstvalue - $v) * 100.0) / $firstvalue}]
+ set val [format "%+3.0f" -$p]%
+ }
+ return $val
+}
+
+proc format_us_time {us} {
+ set units {2 ps 1 ns 0 us -1 ms -2 s}
+
+ if {$us >= 1e8} {
+ # >= 100 seconds
+ return [format "%.0fs" [expr {$us / 1e6}]]
+ }
+
+ # How many digits to the left of the decimal place
+ set leftdigits [expr {int(floor(log10($us)) + 1)}]
+ # Work out how much to shift by, in increments of 10^3
+ set shift3 [expr {(-$leftdigits / 3) + 1}]
+ set shift [expr {$shift3 * 3}]
+ # Always show 3 significant digits
+ set decimals [expr {3 - ($leftdigits + $shift)}]
+ set name [dict get $units $shift3]
+ set value $($us * pow(10.0,$shift))
+ return [format "%.${decimals}f%s" $value $name]
+}
+
proc main {filename} {
set versions {}
array set bench {}
@@ -26,13 +60,20 @@ proc main {filename} {
puts ""
foreach test [lsort [array names bench]] {
+ set col 0
puts -nonewline "[format {% 20s} $test] "
foreach v $bench($test) {
if {$v eq "F"} {
- puts -nonewline " F "
+ set val "F"
} else {
- puts -nonewline [format "% 6d " $v]
+ if {$col == 0} {
+ set val [format_us_time $v]
+ } else {
+ set val [changed_amount [lindex $bench($test) 0] $v]
+ }
}
+ puts -nonewline [format "%6s " $val]
+ incr col
}
puts ""
}