[v1.1] benchtests: Add new directive for benchmark initialization hook

Message ID 20140519111714.GL13048@spoyarek.pnq.redhat.com
State Committed
Headers

Commit Message

Siddhesh Poyarekar May 19, 2014, 11:17 a.m. UTC
  Sorry, I forgot to update this old patch before sending it.  Here's
the correct version.

Siddhesh

	* 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.

From 469da08fd32c5a38c0f8dcc985e0c2342bd729e3 Mon Sep 17 00:00:00 2001
From: Siddhesh Poyarekar <siddhesh@redhat.com>
Date: Sat, 22 Feb 2014 10:09:27 +0530
Subject: [PATCH] benchtests: Add new directive for benchmark initialization
 hook

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.
---
 benchtests/README           | 1 +
 benchtests/bench-skeleton.c | 3 +++
 benchtests/scripts/bench.py | 7 ++++++-
 3 files changed, 10 insertions(+), 1 deletion(-)
  

Comments

Siddhesh Poyarekar May 26, 2014, 6:07 a.m. UTC | #1
Ping!

On Mon, May 19, 2014 at 04:47:15PM +0530, Siddhesh Poyarekar wrote:
> Sorry, I forgot to update this old patch before sending it.  Here's
> the correct version.
> 
> Siddhesh
> 
> 	* 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.
> 
> From 469da08fd32c5a38c0f8dcc985e0c2342bd729e3 Mon Sep 17 00:00:00 2001
> From: Siddhesh Poyarekar <siddhesh@redhat.com>
> Date: Sat, 22 Feb 2014 10:09:27 +0530
> Subject: [PATCH] benchtests: Add new directive for benchmark initialization
>  hook
> 
> 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.
> ---
>  benchtests/README           | 1 +
>  benchtests/bench-skeleton.c | 3 +++
>  benchtests/scripts/bench.py | 7 ++++++-
>  3 files changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/benchtests/README b/benchtests/README
> index 52a3cc2..999d268 100644
> --- a/benchtests/README
> +++ b/benchtests/README
> @@ -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
> diff --git a/benchtests/bench-skeleton.c b/benchtests/bench-skeleton.c
> index 29d6bda..68a91dc 100644
> --- a/benchtests/bench-skeleton.c
> +++ b/benchtests/bench-skeleton.c
> @@ -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;
> diff --git a/benchtests/scripts/bench.py b/benchtests/scripts/bench.py
> index 492c764..eb5a141 100755
> --- a/benchtests/scripts/bench.py
> +++ b/benchtests/scripts/bench.py
> @@ -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:
> -- 
> 1.9.0
>
  
Andreas Jaeger May 26, 2014, 6:59 a.m. UTC | #2
Looks fine to me, thanks,

Andreas
  

Patch

diff --git a/benchtests/README b/benchtests/README
index 52a3cc2..999d268 100644
--- a/benchtests/README
+++ b/benchtests/README
@@ -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
diff --git a/benchtests/bench-skeleton.c b/benchtests/bench-skeleton.c
index 29d6bda..68a91dc 100644
--- a/benchtests/bench-skeleton.c
+++ b/benchtests/bench-skeleton.c
@@ -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;
diff --git a/benchtests/scripts/bench.py b/benchtests/scripts/bench.py
index 492c764..eb5a141 100755
--- a/benchtests/scripts/bench.py
+++ b/benchtests/scripts/bench.py
@@ -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: