benchtests: Add new directive for benchmark initialization hook
authorSiddhesh Poyarekar <siddhesh@redhat.com>
Sat, 22 Feb 2014 04:39:27 +0000 (10:09 +0530)
committerSiddhesh Poyarekar <siddhesh@redhat.com>
Mon, 26 May 2014 07:07:29 +0000 (12:37 +0530)
Add a new 'init' directive that specifies the name of the function to
call to do function-specific initialization.  This is useful for
benchmarks that need to do a one-time initialization before the
functions are executed.

ChangeLog
benchtests/README
benchtests/bench-skeleton.c
benchtests/scripts/bench.py

index 0adb1a9..027464d 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2014-05-26  Siddhesh Poyarekar  <siddhesh@redhat.com>
+
+       * benchtests/README: Document 'init' directive.
+       * benchtests/bench-skeleton.c (main) [BENCH_INIT]: Call
+       BENCH_INIT.
+       * scripts/bench.py (gen_source): Define BENCH_INIT macro.
+       (parse_file): Recognize 'init' directive.
+
 2014-05-26  Kyle McMartin  <kyle@redhat.com>
 
        [BZ #16796]
index 52a3cc2..999d268 100644 (file)
@@ -62,6 +62,7 @@ one to add `foo' to the bench tests:
     and functions (specifically, this includes using "#include "source").
     See pthread_once-inputs and pthreads_once-source.c for an example of how
     to use this to benchmark a function that needs state across several calls.
+  - init: Name of an initializer function to call to initialize the benchtest.
   - name: See following section for instructions on how to use this directive.
 
   Lines beginning with a single hash '#' are treated as comments.  See
index 29d6bda..68a91dc 100644 (file)
@@ -62,6 +62,9 @@ main (int argc, char **argv)
 
   unsigned long iters, res;
 
+#ifdef BENCH_INIT
+  BENCH_INIT ();
+#endif
   TIMING_INIT (res);
 
   iters = 1000 * res;
index 492c764..eb5a141 100755 (executable)
@@ -128,6 +128,10 @@ def gen_source(func, directives, all_vals):
     else:
         getret = ''
 
+    # Test initialization.
+    if directives['init']:
+        print('#define BENCH_INIT %s' % directives['init'])
+
     print(EPILOGUE % {'getret': getret, 'func': func})
 
 
@@ -232,7 +236,8 @@ def parse_file(func):
             'args': [],
             'includes': [],
             'include-sources': [],
-            'ret': ''
+            'ret': '',
+            'init': ''
     }
 
     try: