diff --git a/Makefile b/Makefile index f4dad5f6..350c100c 100644 --- a/Makefile +++ b/Makefile @@ -693,24 +693,24 @@ bench-widths: $(BENCH_CSV) write,stat,read \ -bprobe='%(case)s+%(probe)s' \ -Fi='min(enumerate())' \ - -freaded="avg(ffrac( \ + -freaded="avg(saturate(ffrac( \ float(bench_readed)/float(bench_reads), \ max(1, $$( \ ./scripts/bench.py -R$(BENCH_RUNNER) $(BENCHFLAGS) \ --list-implicit-defines \ - | sed -n 's/^READ_WIDTH=\(.*\)/\1/p'))))" \ - -fprogged="avg(ffrac( \ + | sed -n 's/^READ_WIDTH=\(.*\)/\1/p')))))" \ + -fprogged="avg(saturate(ffrac( \ float(bench_progged)/float(bench_progs), \ max(1, $$( \ ./scripts/bench.py -R$(BENCH_RUNNER) $(BENCHFLAGS) \ --list-implicit-defines \ - | sed -n 's/^PROG_WIDTH=\(.*\)/\1/p'))))" \ - -ferased="avg(ffrac( \ + | sed -n 's/^PROG_WIDTH=\(.*\)/\1/p')))))" \ + -ferased="avg(saturate(ffrac( \ float(bench_erased)/float(bench_erases), \ max(1, $$( \ ./scripts/bench.py -R$(BENCH_RUNNER) $(BENCHFLAGS) \ --list-implicit-defines \ - | sed -n 's/^ERASE_WIDTH=\(.*\)/\1/p'))))" \ + | sed -n 's/^ERASE_WIDTH=\(.*\)/\1/p')))))" \ $(SUMMARYFLAGS)) ## Show heap/stack/disk usage diff --git a/scripts/csv.py b/scripts/csv.py index 3c0dbdda..392c77a6 100755 --- a/scripts/csv.py +++ b/scripts/csv.py @@ -1099,6 +1099,18 @@ class CsvExpr: else: return v.b + @func('saturate', 'a') + class Saturate(Expr): + """Limit to total part of a fraction""" + def eval(self, fields={}, state=None): + v = self.a.eval(fields, state) + if not hasattr(v, '__frac__'): + return v + elif isinstance(v, CsvFrac): + return CsvFrac(min(max(v.a, CsvInt(0)), v.b), v.b) + elif isinstance(v, CsvFfrac): + return CsvFfrac(min(max(v.a, CsvFloat(0)), v.b), v.b) + @func('abs', 'a') class Abs(Expr): """Absolute value"""