diff options
Diffstat (limited to 'benchtests/Makefile')
-rw-r--r-- | benchtests/Makefile | 130 |
1 files changed, 110 insertions, 20 deletions
diff --git a/benchtests/Makefile b/benchtests/Makefile index 74938b925c..67728537a8 100644 --- a/benchtests/Makefile +++ b/benchtests/Makefile @@ -17,43 +17,133 @@ # Makefile for benchmark tests. The only useful target here is `bench`. +# Add benchmark functions in alphabetical order. -# Adding a new function `foo`: -# --------------------------- +subdir := benchtests +bench := acos acosh asin asinh atan atanh cos cosh exp log modf pow rint sin \ + sinh tan tanh -# - Append the function name to the bench variable +acos-ARGLIST = double +acos-RET = double +LDFLAGS-bench-acos = -lm -# - Define foo-ITER with the number of iterations you want to run. Keep it -# high enough that the overhead of clock_gettime is only a small fraction of -# the total run time of the test. +acosh-ARGLIST = double +acosh-RET = double +LDFLAGS-bench-acosh = -lm -# - Define foo-ARGLIST as a colon separated list of types of the input -# arguments. Use `void` if function does not take any inputs. Put in quotes -# if the input argument is a pointer, e.g.: +asin-ARGLIST = double +asin-RET = double +LDFLAGS-bench-asin = -lm -# malloc-ARGLIST: "void *" +asinh-ARGLIST = double +asinh-RET = double +LDFLAGS-bench-asinh = -lm -# - Define foo-RET as the type the function returns. Skip if the function -# returns void. One could even skip foo-ARGLIST if the function does not -# take any inputs AND the function returns void. +atan-ARGLIST = double +atan-RET = double +LDFLAGS-bench-atan = -lm +atanh-ARGLIST = double +atanh-RET = double +LDFLAGS-bench-atanh = -lm -# - Make a file called `foo-inputs` with one input value per line, an input -# being a comma separated list of arguments to be passed into the function. -# See pow-inputs for an example. +cos-ARGLIST = double +cos-RET = double +LDFLAGS-bench-cos = -lm -subdir := benchtests -bench := exp pow +cosh-ARGLIST = double +cosh-RET = double +LDFLAGS-bench-cosh = -lm -exp-ITER = 100000 exp-ARGLIST = double exp-RET = double LDFLAGS-bench-exp = -lm -pow-ITER = 100000 +log-ARGLIST = double +log-RET = double +LDFLAGS-bench-log = -lm + pow-ARGLIST = double:double pow-RET = double LDFLAGS-bench-pow = -lm +rint-ARGLIST = double +rint-RET = double +LDFLAGS-bench-rint = -lm + +sin-ARGLIST = double +sin-RET = double +LDFLAGS-bench-sin = -lm + +sinh-ARGLIST = double +sinh-RET = double +LDFLAGS-bench-sinh = -lm + +tan-ARGLIST = double +tan-RET = double +LDFLAGS-bench-tan = -lm + +tanh-ARGLIST = double +tanh-RET = double +LDFLAGS-bench-tanh = -lm + + + +# Rules to build and execute the benchmarks. Do not put any benchmark +# parameters beyond this point. + include ../Makeconfig include ../Rules + +binaries-bench := $(addprefix $(objpfx)bench-,$(bench)) + +# The default duration: 10 seconds. +ifndef BENCH_DURATION +BENCH_DURATION := 10 +endif + +CPPFLAGS-nonlib = -DDURATION=$(BENCH_DURATION) + +# Use clock_gettime to measure performance of functions. The default is to use +# HP_TIMING if it is available. +ifdef USE_CLOCK_GETTIME +CPPFLAGS-nonlib += -DUSE_CLOCK_GETTIME +endif + +# This makes sure CPPFLAGS-nonlib and CFLAGS-nonlib are passed +# for all these modules. +cpp-srcs-left := $(binaries-bench:=.c) +lib := nonlib +include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) + +bench-deps := bench-skeleton.c bench-timing.h Makefile + +run-bench = $(test-wrapper-env) \ + GCONV_PATH=$(common-objpfx)iconvdata LC_ALL=C \ + $($*-ENV) $(rtld-prefix) $${run} + +bench-clean: + rm -f $(binaries-bench) $(addsuffix .o,$(binaries-bench)) + +bench: $(binaries-bench) + { for run in $^; do \ + echo "Running $${run}" >&2; \ + $(run-bench); \ + done; } > $(objpfx)bench.out-tmp; \ + if [ -f $(objpfx)bench.out ]; then \ + mv -f $(objpfx)bench.out $(objpfx)bench.out.old; \ + fi; \ + mv -f $(objpfx)bench.out-tmp $(objpfx)bench.out + +$(binaries-bench): %: %.o \ + $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ + $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) + $(+link) + +$(objpfx)bench-%.c: %-inputs $(bench-deps) + { if [ -n "$($*-INCLUDE)" ]; then \ + cat $($*-INCLUDE); \ + fi; \ + $(..)scripts/bench.pl $(patsubst %-inputs,%,$<) \ + $($*-ARGLIST) $($*-RET); } > $@-tmp + mv -f $@-tmp $@ |