From 1b7e027642539ae3001cd0687320bdec9729054c Mon Sep 17 00:00:00 2001 From: hellerve Date: Mon, 27 Jan 2020 16:56:22 +0100 Subject: [PATCH] core: move elapsed_time into bench module --- core/Bench.carp | 13 ++++++++----- core/carp_bench.h | 2 +- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/core/Bench.carp b/core/Bench.carp index 61af3fe0..e9c9a1a6 100644 --- a/core/Bench.carp +++ b/core/Bench.carp @@ -1,13 +1,16 @@ (load "Statistics.carp") (system-include "carp_bench.h") -(register get-time-elapsed (Fn [] Double)) (defmodule Bench (def min-runs 50) (private min-runs) (hidden min-runs) + (private get-time-elapsed) + (hidden get-time-elapsed) + (register get-time-elapsed (Fn [] Double) "get_time_elapsed") + (doc set-min-runs! "sets the minimum number of runs to `n`. If your functions takes a large amount of time, experimenting with this might make sense. The default value is `50`, which means that your function runs at least `50` times before even hitting a timeout.") @@ -106,15 +109,15 @@ If your functions takes a large amount of time, experimenting with this might ma (defmacro benchn [n form] - (list 'let ['before (get-time-elapsed) + (list 'let ['before (Bench.get-time-elapsed) 'times []] (list 'do (list 'for ['i 0 n] - (list 'let ['before-once (get-time-elapsed)] + (list 'let ['before-once (Bench.get-time-elapsed)] (list 'do form - (list 'set! × (Array.push-back (Array.copy ×) (Double.- (get-time-elapsed) before-once)))))) - (list 'let ['total (Double.- (get-time-elapsed) before) + (list 'set! × (Array.push-back (Array.copy ×) (Double.- (Bench.get-time-elapsed) before-once)))))) + (list 'let ['total (Double.- (Bench.get-time-elapsed) before) 'per (list 'Double./ 'total (list 'Double.from-int n))] (do (Bench.print "Total time elapsed: " total) diff --git a/core/carp_bench.h b/core/carp_bench.h index 2aa2ab4f..1372fe85 100644 --- a/core/carp_bench.h +++ b/core/carp_bench.h @@ -1,4 +1,4 @@ -double get_MINUS_time_MINUS_elapsed() { +double get_time_elapsed() { struct timespec tv; clock_gettime(CLOCK_REALTIME, &tv); return 1000000000 * tv.tv_sec + tv.tv_nsec;