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.
This commit is contained in:
Siddhesh Poyarekar 2014-02-22 10:09:27 +05:30
parent 75f11331f9
commit 15eaf6ffe3
4 changed files with 18 additions and 1 deletions

View File

@ -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> 2014-05-26 Kyle McMartin <kyle@redhat.com>
[BZ #16796] [BZ #16796]

View File

@ -62,6 +62,7 @@ one to add `foo' to the bench tests:
and functions (specifically, this includes using "#include "source"). and functions (specifically, this includes using "#include "source").
See pthread_once-inputs and pthreads_once-source.c for an example of how 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. 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. - name: See following section for instructions on how to use this directive.
Lines beginning with a single hash '#' are treated as comments. See Lines beginning with a single hash '#' are treated as comments. See

View File

@ -62,6 +62,9 @@ main (int argc, char **argv)
unsigned long iters, res; unsigned long iters, res;
#ifdef BENCH_INIT
BENCH_INIT ();
#endif
TIMING_INIT (res); TIMING_INIT (res);
iters = 1000 * res; iters = 1000 * res;

View File

@ -128,6 +128,10 @@ def gen_source(func, directives, all_vals):
else: else:
getret = '' getret = ''
# Test initialization.
if directives['init']:
print('#define BENCH_INIT %s' % directives['init'])
print(EPILOGUE % {'getret': getret, 'func': func}) print(EPILOGUE % {'getret': getret, 'func': func})
@ -232,7 +236,8 @@ def parse_file(func):
'args': [], 'args': [],
'includes': [], 'includes': [],
'include-sources': [], 'include-sources': [],
'ret': '' 'ret': '',
'init': ''
} }
try: try: