From 3d159dad2b93ab3033224edf2d29f7602a955e3e Mon Sep 17 00:00:00 2001 From: Steve Bennett Date: Thu, 11 Jun 2020 09:02:00 +1000 Subject: improvements to tools/benchtable.tcl Handles decimal times Better formatting. Still need to avoid duplication with bench.tcl Signed-off-by: Steve Bennett --- tools/benchtable.tcl | 45 +++++++++++++++++++++++++++++++++++++++++++-- 1 file 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 # +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 "" } -- cgit v1.1