aboutsummaryrefslogtreecommitdiff
path: root/src/bench.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/bench.h')
-rw-r--r--src/bench.h29
1 files changed, 24 insertions, 5 deletions
diff --git a/src/bench.h b/src/bench.h
index 668ec39f71..0559b3e853 100644
--- a/src/bench.h
+++ b/src/bench.h
@@ -17,21 +17,40 @@ static double gettimedouble(void) {
return tv.tv_usec * 0.000001 + tv.tv_sec;
}
-void run_benchmark(void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) {
+void print_number(double x) {
+ double y = x;
+ int c = 0;
+ if (y < 0.0) y = -y;
+ while (y < 100.0) {
+ y *= 10.0;
+ c++;
+ }
+ printf("%.*f", c, x);
+}
+
+void run_benchmark(char *name, void (*benchmark)(void*), void (*setup)(void*), void (*teardown)(void*), void* data, int count, int iter) {
+ int i;
double min = HUGE_VAL;
double sum = 0.0;
double max = 0.0;
- for (int i = 0; i < count; i++) {
+ for (i = 0; i < count; i++) {
+ double begin, total;
if (setup) setup(data);
- double begin = gettimedouble();
+ begin = gettimedouble();
benchmark(data);
- double total = gettimedouble() - begin;
+ total = gettimedouble() - begin;
if (teardown) teardown(data);
if (total < min) min = total;
if (total > max) max = total;
sum += total;
}
- printf("min %.3fus / avg %.3fus / max %.3fus\n", min * 1000000.0 / iter, (sum / count) * 1000000.0 / iter, max * 1000000.0 / iter);
+ printf("%s: min ", name);
+ print_number(min * 1000000.0 / iter);
+ printf("us / avg ");
+ print_number((sum / count) * 1000000.0 / iter);
+ printf("us / avg ");
+ print_number(max * 1000000.0 / iter);
+ printf("us\n");
}
#endif