aboutsummaryrefslogtreecommitdiff
path: root/scripts/bench.pl
AgeCommit message (Collapse)AuthorFilesLines
2014-03-21Implement benchmarking script in pythonSiddhesh Poyarekar1-205/+0
Implemented the benchmark script in python since it is much cleaner and simpler to maintain.
2014-01-01Update copyright notices with scripts/update-copyrightsAllan McRae1-1/+1
2013-12-06benchtests: Append volatile keyword to type instead of prependingSiddhesh Poyarekar1-2/+2
`volatile int` means the same as 'int volatile', but that's not the case for 'volatile char *' and 'char * volatile'. We won't need a 'char volatile *' or other complicated semantics for now.
2013-12-05Accept output arguments to benchmark functionsSiddhesh Poyarekar1-4/+21
This patch adds the ability to accept output arguments to functions being benchmarked, by nesting the argument type in <> in the args directive. It includes the sincos implementation as an example, where the function would have the following args directive: ## args: double:<double *>:<double *> This simply adds a definition for a static variable whose pointer gets passed into the function, so it's not yet possible to pass something more complicated like a pre-allocated string or array. That would be a good feature to add if a function needs it. The values in the input file will map only to the input arguments. So if I had a directive like this for a function foo: ## args: int:<int *>:int:<int *> and I have a value list like this: 1, 2 3, 4 5, 6 then the function calls generated would be: foo (1, &out1, 2, &out2); foo (3, &out1, 4, &out2); foo (5, &out1, 6, &out2);
2013-12-04benchtests: skip over blank lines in benchmark input filesSiddhesh Poyarekar1-2/+2
2013-10-10benchtests: Add include-sources directive.Torvald Riegel1-4/+18
This adds the "include-sources" directive to scripts/bench.pl. This allows for including source code (vs including headers, which might get a different search path) after the inclusion of any headers.
2013-10-07Add more directives to benchmark input filesSiddhesh Poyarekar1-64/+70
This patch adds some more directives to the benchmark inputs file, moving functionality from the Makefile and making the code generation script a bit cleaner. The function argument and return types that were earlier added as variables in the makefile and passed to the script via command line arguments are now the 'args' and 'ret' directive respectively. 'args' should be a colon separated list of argument types (skipped if the function doesn't accept any arguments) and 'ret' should be the return type. Additionally, an 'includes' directive may have a comma separated list of headers to include in the source. For example, the pow input file now looks like this: 42.0, 42.0 1.0000000000000020, 1.5 I did this to unclutter the benchtests Makefile a bit and eventually eliminate dependency of the tests on the Makefile and have tests depend on their respective include files only.
2013-05-17Prevent optimizing out of benchmark function callSiddhesh Poyarekar1-1/+1
Resolves: #15424 The compiler would optimize the benchmark function call out of the loop and call it only once, resulting in blazingly fast times for some benchmarks (notably atan, sin and cos). Mark the inputs as volatile so that the code is forced to read again from the input for each iteration.
2013-04-30Allow multiple input domains to be run in the same benchmark programSiddhesh Poyarekar1-14/+91
Some math functions have distinct performance characteristics in specific domains of inputs, where some inputs return via a fast path while other inputs require multiple precision calculations, that too at different precision levels. The way to implement different domains was to have a separate source file and benchmark definition, resulting in separate programs. This clutters up the benchmark, so this change allows these domains to be consolidated into the same input file. To do this, the input file format is now enhanced to allow comments with a preceding # and directives with two # at the begining of a line. A directive that looks like: tells the benchmark generation script that what follows is a different domain of inputs. The value of the 'name' directive (in this case, foo) is used in the output. The two input domains are then executed sequentially and their results collated separately. with the above directive, there would be two lines in the result that look like: func(): .... func(foo): ...
2013-04-30Maintain runtime of each benchmark at ~10 secondsSiddhesh Poyarekar1-7/+5
The idea to run benchmarks for a constant number of iterations is problematic. While the benchmarks may run for 10 seconds on x86_64, they could run for about 30 seconds on powerpc and worse, over 3 minutes on arm. Besides that, adding a new benchmark is cumbersome since one needs to find out the number of iterations needed for a sufficient runtime. A better idea would be to run each benchmark for a specific amount of time. This patch does just that. The run time defaults to 10 seconds and it is configurable at command line: make BENCH_DURATION=5 bench
2013-03-15Framework for performance benchmarking of functionsSiddhesh Poyarekar1-0/+93
See benchtests/Makefile to know how to use it.