ref: 00128bc62f7b3d643caa11754e96387ac8e0830d
parent: 48a546aeb35a92612019402466507e1910c00f81
author: Ori Bernstein <ori@eigenstate.org>
date: Mon Jul 14 00:09:14 EDT 2025
bench.c; clean up output, scale it better
--- a/bench.c
+++ b/bench.c
@@ -178,40 +178,55 @@
return res;
}
+double
+scaletime(vlong ns, vlong n, char **unit)
+{
+ static const struct {
+ char *name;
+ vlong div;
+ } units[] = {
+ {"ns", 1},
+ {"μs", 1000},
+ {"ms", 1000*1000},
+ {"s", 1000*1000*1000},
+ {"m", 60*1000*1000*1000},
+ {"h", 3600*1000*1000*1000},
+ };
+ int i;
+
+ for(i = 0; i < nelem(units)-1; i++)
+ if(ns / (n * units[i].div) < 1000)
+ break;
+ *unit = units[i].name;
+ return (double)ns / (double)(n*units[i].div);
+}
+
static void
benchres(BResult *res)
{
- char nsop[32];
+ char *unit;
+ char tmop[64];
char cyop[32];
- vlong nsperop;
+ double nsperop;
uvlong cyperop;
if(res->N <= 0) {
- nsperop = 0;
- cyperop = 0;
- } else {
- nsperop = res->ns / (vlong)res->N;
- cyperop = res->cycles / (uvlong)res->N;
+ print("skipped\n");
+ return;
}
- snprint(nsop, sizeof(nsop), "%10lld ns/op", nsperop);
- snprint(cyop, sizeof(cyop), "%10ulld cy/op", cyperop);
+ nsperop = scaletime(res->ns, (vlong)res->N, &unit);
+ snprint(tmop, sizeof(tmop), "%12.2f %s/op", nsperop, unit);
- if(res->N > 0 && nsperop < 100) {
- if(nsperop < 10)
- snprint(nsop, sizeof(nsop), "%13.2f ns/op", (double)res->ns / (double)res->N);
- else
- snprint(nsop, sizeof(nsop), "%12.1f ns/op", (double)res->ns / (double)res->N);
- }
+ cyperop = res->cycles / (uvlong)res->N;
+ if(cyperop < 10)
+ snprint(cyop, sizeof(cyop), "%13.2f cy/op", (double)res->cycles / (double)res->N);
+ else if(cyperop < 100)
+ snprint(cyop, sizeof(cyop), "%12.1f cy/op", (double)res->cycles / (double)res->N);
+ else
+ snprint(cyop, sizeof(cyop), "%10ulld cy/op", cyperop);
- if(res->N > 0 && cyperop < 100) {
- if(cyperop < 10)
- snprint(cyop, sizeof(cyop), "%13.2f cy/op", (double)res->cycles / (double)res->N);
- else
- snprint(cyop, sizeof(cyop), "%12.1f cy/op", (double)res->cycles / (double)res->N);
- }
-
- print("%10d N %.16s\t%s (total %f s)\n", res->N, nsop, cyop, (double)res->ns / Nsec);
+ print("%10d N %s\t%s\n", res->N, tmop, cyop);
}
/*
--
⑨