diff options
author | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 16:33:27 +0000 |
---|---|---|
committer | Samuel Thibault <samuel.thibault@ens-lyon.org> | 2018-12-27 16:33:27 +0000 |
commit | 064374be911f72dfaec8a75f06da1f9fc1827712 (patch) | |
tree | ad96fd1f1b9b57a50005db7803f6b79e748bb820 /benchtests/Makefile | |
parent | 4dc1e6e42f1f602e1d2227e112f2db8dce9da763 (diff) | |
parent | 7c7d34a16f08f84427b3f617313d9633423ad5eb (diff) |
Merge commit 'refs/top-bases/t/hurdsig-global-dispositions' into t/hurdsig-global-dispositions
Diffstat (limited to 'benchtests/Makefile')
-rw-r--r-- | benchtests/Makefile | 138 |
1 files changed, 103 insertions, 35 deletions
diff --git a/benchtests/Makefile b/benchtests/Makefile index 2b553f8355..bcd6a9c26d 100644 --- a/benchtests/Makefile +++ b/benchtests/Makefile @@ -1,4 +1,4 @@ -# Copyright (C) 2013-2016 Free Software Foundation, Inc. +# Copyright (C) 2013-2018 Free Software Foundation, Inc. # This file is part of the GNU C Library. # The GNU C Library is free software; you can redistribute it and/or @@ -18,19 +18,23 @@ # Makefile for benchmark tests. The only useful target here is `bench`. # Add benchmark functions in alphabetical order. -PYTHON := python - subdir := benchtests include ../Makeconfig bench-math := acos acosh asin asinh atan atanh cos cosh exp exp2 log log2 \ - modf pow rint sin sincos sinh sqrt tan tanh + modf pow rint sin sincos sinh sqrt tan tanh fmin fmax fminf \ + fmaxf powf trunc truncf expf exp2f logf log2f sincosf sinf \ + cosf -bench-pthread := pthread_once +bench-pthread := pthread_once thread_create bench-string := ffs ffsll +ifeq (${BENCHSET},) bench := $(bench-math) $(bench-pthread) $(bench-string) +else +bench := $(foreach B,$(filter bench-%,${BENCHSET}), ${${B}}) +endif # String function benchmarks. string-benchset := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \ @@ -38,19 +42,29 @@ string-benchset := bcopy bzero memccpy memchr memcmp memcpy memmem memmove \ strcat strchr strchrnul strcmp strcpy strcspn strlen \ strncasecmp strncat strncmp strncpy strnlen strpbrk strrchr \ strspn strstr strcpy_chk stpcpy_chk memrchr strsep strtok \ - strcoll + strcoll memcpy-large memcpy-random memmove-large memset-large \ + memcpy-walk memset-walk memmove-walk + +# Build and run locale-dependent benchmarks only if we're building natively. +ifeq (no,$(cross-compiling)) wcsmbs-benchset := wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat \ wcscmp wcsncmp wcschr wcschrnul wcsrchr wcsspn wcspbrk wcscspn \ wmemchr wmemset wmemcmp +else +wcsmbs-benchset := +endif + string-benchset-all := $(string-benchset) ${wcsmbs-benchset} +ifeq (no,$(cross-compiling)) # We have to generate locales LOCALES := en_US.UTF-8 tr_TR.UTF-8 cs_CZ.UTF-8 fa_IR.UTF-8 fr_FR.UTF-8 \ ja_JP.UTF-8 si_LK.UTF-8 en_GB.UTF-8 vi_VN.UTF-8 ar_SA.UTF-8 \ da_DK.UTF-8 pl_PL.UTF-8 pt_PT.UTF-8 el_GR.UTF-8 ru_RU.UTF-8 \ - iw_IL.UTF-8 is_IS.UTF-8 es_ES.UTF-8 hi_IN.UTF-8 sv_SE.UTF-8 \ + he_IL.UTF-8 is_IS.UTF-8 es_ES.UTF-8 hi_IN.UTF-8 sv_SE.UTF-8 \ hu_HU.UTF-8 it_IT.UTF-8 sr_RS.UTF-8 zh_CN.UTF-8 include ../gen-locales.mk +endif stdlib-benchset := strtod @@ -58,13 +72,28 @@ stdio-common-benchset := sprintf math-benchset := math-inlines +ifeq (${BENCHSET},) benchset := $(string-benchset-all) $(stdlib-benchset) $(stdio-common-benchset) \ $(math-benchset) +else +benchset := $(foreach B,$(filter %-benchset,${BENCHSET}), ${${B}}) +endif CFLAGS-bench-ffs.c += -fno-builtin CFLAGS-bench-ffsll.c += -fno-builtin - +CFLAGS-bench-sqrt.c += -fno-builtin +CFLAGS-bench-fmin.c += -fno-builtin +CFLAGS-bench-fminf.c += -fno-builtin +CFLAGS-bench-fmax.c += -fno-builtin +CFLAGS-bench-fmaxf.c += -fno-builtin +CFLAGS-bench-trunc.c += -fno-builtin +CFLAGS-bench-truncf.c += -fno-builtin + +ifeq (${BENCHSET},) bench-malloc := malloc-thread +else +bench-malloc := $(filter malloc-%,${BENCHSET}) +endif $(addprefix $(objpfx)bench-,$(bench-math)): $(libm) $(addprefix $(objpfx)bench-,$(math-benchset)): $(libm) @@ -80,6 +109,11 @@ $(objpfx)bench-malloc-thread: $(shared-thread-library) # affect their performance. .NOTPARALLEL: +bench-extra-objs = json-lib.o + +extra-objs += $(bench-extra-objs) +others-extras = $(bench-extra-objs) + include ../Rules binaries-bench := $(addprefix $(objpfx)bench-,$(bench)) @@ -91,7 +125,7 @@ ifndef BENCH_DURATION BENCH_DURATION := 10 endif -CPPFLAGS-nonlib += -DDURATION=$(BENCH_DURATION) +CPPFLAGS-nonlib += -DDURATION=$(BENCH_DURATION) -D_ISOMAC # Use clock_gettime to measure performance of functions. The default is to use # HP_TIMING if it is available. @@ -110,15 +144,13 @@ endif cpp-srcs-left := $(binaries-benchset:=.c) $(binaries-bench:=.c) \ $(binaries-bench-malloc:=.c) lib := nonlib -include $(patsubst %,$(..)cppflags-iterator.mk,$(cpp-srcs-left)) - -extra-objs += json-lib.o +include $(patsubst %,$(..)libof-iterator.mk,$(cpp-srcs-left)) bench-deps := bench-skeleton.c bench-timing.h Makefile run-bench = $(test-wrapper-env) \ $(run-program-env) \ - $($*-ENV) $(rtld-prefix) $${run} + $($*-ENV) $(test-via-rtld-prefix) $${run} timing-type := $(objpfx)bench-timing-type @@ -127,8 +159,39 @@ bench-clean: rm -f $(binaries-benchset) $(addsuffix .o,$(binaries-benchset)) rm -f $(binaries-bench-malloc) $(addsuffix .o,$(binaries-bench-malloc)) rm -f $(timing-type) $(addsuffix .o,$(timing-type)) + rm -f $(addprefix $(objpfx),$(bench-extra-objs)) + +# Validate the passed in BENCHSET +ifneq ($(strip ${BENCHSET}),) +VALIDBENCHSETNAMES := bench-pthread bench-math bench-string string-benchset \ + wcsmbs-benchset stdlib-benchset stdio-common-benchset math-benchset \ + malloc-thread +INVALIDBENCHSETNAMES := $(filter-out ${VALIDBENCHSETNAMES},${BENCHSET}) +ifneq (${INVALIDBENCHSETNAMES},) +$(info The following values in BENCHSET are invalid: ${INVALIDBENCHSETNAMES}) +$(info The valid ones are: ${VALIDBENCHSETNAMES}) +$(error Invalid BENCHSET value) +endif +endif + +# Define the bench target only if the target has a usable python installation. +ifdef PYTHON +bench: bench-build bench-set bench-func bench-malloc +else +bench: + @echo "The bench target needs python to run." + @exit 1 +endif -bench: $(timing-type) $(gen-locales) bench-set bench-func bench-malloc +# Target to only build the benchmark without running it. We generate locales +# only if we're building natively. +ifeq (no,$(cross-compiling)) +bench-build: $(gen-locales) $(timing-type) $(binaries-bench) \ + $(binaries-benchset) $(binaries-bench-malloc) +else +bench-build: $(timing-type) $(binaries-bench) $(binaries-benchset) \ + $(binaries-bench-malloc) +endif bench-set: $(binaries-benchset) for run in $^; do \ @@ -137,10 +200,11 @@ bench-set: $(binaries-benchset) done bench-malloc: $(binaries-bench-malloc) - run=$(objpfx)bench-malloc-thread; \ - for thr in 1 8 16 32; do \ - echo "Running $${run} $${thr}"; \ + for run in $^; do \ + for thr in 1 8 16 32; do \ + echo "Running $${run} $${thr}"; \ $(run-bench) $${thr} > $${run}-$${thr}.out; \ + done;\ done # Build and execute the benchmark functions. This target generates JSON @@ -148,31 +212,35 @@ bench-malloc: $(binaries-bench-malloc) # so one could even execute them individually and process it using any JSON # capable language or tool. bench-func: $(binaries-bench) + if [ -n '$^' ] ; then \ { timing_type=$$($(timing-type)); \ - echo "{\"timing_type\": \"$${timing_type}\","; \ - echo " \"functions\": {"; \ - for run in $^; do \ - if ! [ "x$${run}" = "x$<" ]; then \ - echo ","; \ + echo "{\"timing_type\": \"$${timing_type}\","; \ + echo " \"functions\": {"; \ + for run in $^; do \ + if ! [ "x$${run}" = "x$<" ]; then \ + echo ","; \ + fi; \ + echo "Running $${run}" >&2; \ + $(run-bench) $(DETAILED_OPT); \ + done; \ + echo; \ + echo " }"; \ + echo "}"; \ + } > $(objpfx)bench.out-tmp; \ + if [ -f $(objpfx)bench.out ]; then \ + mv -f $(objpfx)bench.out $(objpfx)bench.out.old; \ fi; \ - echo "Running $${run}" >&2; \ - $(run-bench) $(DETAILED_OPT); \ - done; \ - echo; \ - echo " }"; \ - echo "}"; } > $(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 - $(PYTHON) scripts/validate_benchout.py $(objpfx)bench.out \ - scripts/benchout.schema.json + mv -f $(objpfx)bench.out-tmp $(objpfx)bench.out; \ + $(PYTHON) scripts/validate_benchout.py $(objpfx)bench.out \ + scripts/benchout.schema.json; \ + fi $(timing-type) $(binaries-bench) $(binaries-benchset) \ $(binaries-bench-malloc): %: %.o $(objpfx)json-lib.o \ + $(link-extra-libs-tests) \ $(sort $(filter $(common-objpfx)lib%,$(link-libc))) \ $(addprefix $(csu-objpfx),start.o) $(+preinit) $(+postinit) - $(+link) + $(+link-tests) $(objpfx)bench-%.c: %-inputs $(bench-deps) { if [ -n "$($*-INCLUDE)" ]; then \ |