diff options
Diffstat (limited to 'benchtests')
-rw-r--r-- | benchtests/Makefile | 45 | ||||
-rw-r--r-- | benchtests/atan-inputs | 6 | ||||
-rw-r--r-- | benchtests/bench-modf.c | 12 | ||||
-rw-r--r-- | benchtests/bench-skeleton.c | 79 | ||||
-rw-r--r-- | benchtests/cos-inputs | 8 | ||||
-rw-r--r-- | benchtests/exp-inputs | 4 | ||||
-rw-r--r-- | benchtests/pow-inputs | 4 | ||||
-rw-r--r-- | benchtests/sin-inputs | 10 | ||||
-rw-r--r-- | benchtests/slowatan-inputs | 3 | ||||
-rw-r--r-- | benchtests/slowatan.c | 19 | ||||
-rw-r--r-- | benchtests/slowcos-inputs | 5 | ||||
-rw-r--r-- | benchtests/slowcos.c | 19 | ||||
-rw-r--r-- | benchtests/slowexp-inputs | 1 | ||||
-rw-r--r-- | benchtests/slowexp.c | 19 | ||||
-rw-r--r-- | benchtests/slowpow-inputs | 1 | ||||
-rw-r--r-- | benchtests/slowpow.c | 19 | ||||
-rw-r--r-- | benchtests/slowsin-inputs | 7 | ||||
-rw-r--r-- | benchtests/slowsin.c | 19 | ||||
-rw-r--r-- | benchtests/slowtan-inputs | 1 | ||||
-rw-r--r-- | benchtests/slowtan.c | 19 | ||||
-rw-r--r-- | benchtests/tan-inputs | 4 |
21 files changed, 87 insertions, 217 deletions
diff --git a/benchtests/Makefile b/benchtests/Makefile index 9d25d6933a..19e1be6f4b 100644 --- a/benchtests/Makefile +++ b/benchtests/Makefile @@ -39,15 +39,12 @@ # See pow-inputs for an example. subdir := benchtests -bench := exp pow rint sin cos tan atan modf \ - slowexp slowpow slowsin slowcos slowtan slowatan +bench := exp pow rint sin cos tan atan modf -# exp function fast path: sysdeps/ieee754/dbl-64/e_exp.c exp-ARGLIST = double exp-RET = double LDFLAGS-bench-exp = -lm -# pow function fast path: sysdeps/ieee754/dbl-64/e_pow.c pow-ARGLIST = double:double pow-RET = double LDFLAGS-bench-pow = -lm @@ -56,62 +53,22 @@ rint-ARGLIST = double rint-RET = double LDFLAGS-bench-rint = -lm -# exp function slowest path: sysdeps/ieee754/dbl-64/mpexp.c -slowexp-ARGLIST = double -slowexp-RET = double -slowexp-INCLUDE = slowexp.c -LDFLAGS-bench-slowexp = -lm - -# sin function fast path: sysdeps/ieee754/dbl-64/s_sin.c sin-ARGLIST = double sin-RET = double LDFLAGS-bench-sin = -lm -# cos function fast path: sysdeps/ieee754/dbl-64/s_sin.c cos-ARGLIST = double cos-RET = double LDFLAGS-bench-cos = -lm -# tan function fast path: sysdeps/ieee754/dbl-64/s_tan.c tan-ARGLIST = double tan-RET = double LDFLAGS-bench-tan = -lm -# atan function fast path: sysdeps/ieee754/dbl-64/s_atan.c atan-ARGLIST = double atan-RET = double LDFLAGS-bench-atan = -lm -# pow function slowest path: sysdeps/ieee754/dbl-64/slowpow.c -slowpow-ARGLIST = double:double -slowpow-RET = double -slowpow-INCLUDE = slowpow.c -LDFLAGS-bench-slowpow = -lm - -# sin function slowest path: sysdeps/ieee754/dbl-64/sincos32.c -slowsin-ARGLIST = double -slowsin-RET = double -slowsin-INCLUDE = slowsin.c -LDFLAGS-bench-slowsin = -lm - -# cos function slowest path: sysdeps/ieee754/dbl-64/sincos32.c -slowcos-ARGLIST = double -slowcos-RET = double -slowcos-INCLUDE = slowcos.c -LDFLAGS-bench-slowcos = -lm - -# tan function slowest path: sysdeps/ieee754/dbl-64/mptan.c -slowtan-ARGLIST = double -slowtan-RET = double -slowtan-INCLUDE = slowtan.c -LDFLAGS-bench-slowtan = -lm - -# atan function slowest path: sysdeps/ieee754/dbl-64/mpatan.c -slowatan-ARGLIST = double -slowatan-RET = double -slowatan-INCLUDE = slowatan.c -LDFLAGS-bench-slowatan = -lm - # Rules to build and execute the benchmarks. Do not put any benchmark diff --git a/benchtests/atan-inputs b/benchtests/atan-inputs index c685db3b97..4a2cf3aca3 100644 --- a/benchtests/atan-inputs +++ b/benchtests/atan-inputs @@ -1,3 +1,9 @@ 0x1.000000c5cba86p0 0x1.000001883003ap0 0x1.00000dfb2b674p0 +# atan slowest path at 768 bits +# Implemented in sysdeps/ieee754/dbl-64/mpatan.c +## name: 768bits +0x1.000000c5cba87p0 +0x1.000001883003bp0 +0x1.00000dfb2b675p0 diff --git a/benchtests/bench-modf.c b/benchtests/bench-modf.c index 90a5255291..7fae7dc6ac 100644 --- a/benchtests/bench-modf.c +++ b/benchtests/bench-modf.c @@ -17,7 +17,7 @@ extern double modf (double, double *); -#define CALL_BENCH_FUNC(j, i) modf ( in[j].arg0, &i); +#define CALL_BENCH_FUNC(j, i) modf (in[j].arg0, &i); struct args { @@ -28,11 +28,17 @@ struct args { -42.42 } }; -#define NUM_SAMPLES (sizeof (in) / sizeof (struct args)) +#define NUM_VARIANTS 1 +#define NUM_SAMPLES(v) (sizeof (in) / sizeof (struct args)) static volatile double ret = 0.0; -#define BENCH_FUNC(j) ({double iptr; ret = CALL_BENCH_FUNC (j, iptr);}) +#define BENCH_FUNC(v, j) \ +({ \ + double iptr; \ + ret = CALL_BENCH_FUNC (j, iptr); \ +}) #define FUNCNAME "modf" +#define VARIANT(v) FUNCNAME "()" #include "bench-skeleton.c" diff --git a/benchtests/bench-skeleton.c b/benchtests/bench-skeleton.c index bbd151b0ec..7359184ba8 100644 --- a/benchtests/bench-skeleton.c +++ b/benchtests/bench-skeleton.c @@ -25,12 +25,11 @@ #define TIMESPEC_AFTER(a, b) \ (((a).tv_sec == (b).tv_sec) ? \ ((a).tv_nsec > (b).tv_nsec) : \ - ((a).tv_sec > (b).tv_sec)) + ((a).tv_sec > (b).tv_sec)) int main (int argc, char **argv) { unsigned long i, k; - uint64_t total = 0, max = 0, min = 0x7fffffffffffffff; struct timespec start, end, runtime; memset (&runtime, 0, sizeof (runtime)); @@ -45,53 +44,57 @@ main (int argc, char **argv) but it's better than having nothing at all. */ unsigned long iters = 1000 * start.tv_nsec; - /* Run for approxmately DURATION seconds. */ - clock_gettime (CLOCK_MONOTONIC_RAW, &runtime); - runtime.tv_sec += DURATION; - - double d_total_i = 0; - while (1) + for (int v = 0; v < NUM_VARIANTS; v++) { - for (i = 0; i < NUM_SAMPLES; i++) - { - clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &start); - for (k = 0; k < iters; k++) - BENCH_FUNC(i); - clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &end); + /* Run for approximately DURATION seconds. */ + clock_gettime (CLOCK_MONOTONIC_RAW, &runtime); + runtime.tv_sec += DURATION; - uint64_t cur = (end.tv_nsec - start.tv_nsec - + ((end.tv_sec - start.tv_sec) - * (uint64_t) 1000000000)); + double d_total_i = 0; + uint64_t total = 0, max = 0, min = 0x7fffffffffffffff; + while (1) + { + for (i = 0; i < NUM_SAMPLES (v); i++) + { + clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &start); + for (k = 0; k < iters; k++) + BENCH_FUNC (v, i); + clock_gettime (CLOCK_PROCESS_CPUTIME_ID, &end); - if (cur > max) - max = cur; + uint64_t cur = (end.tv_nsec - start.tv_nsec + + ((end.tv_sec - start.tv_sec) + * (uint64_t) 1000000000)); - if (cur < min) - min = cur; + if (cur > max) + max = cur; - total += cur; + if (cur < min) + min = cur; - d_total_i += iters; - } + total += cur; - struct timespec curtime; + d_total_i += iters; + } + struct timespec curtime; - memset (&curtime, 0, sizeof (curtime)); - clock_gettime (CLOCK_MONOTONIC_RAW, &curtime); - if (TIMESPEC_AFTER (curtime, runtime)) - goto done; - } + memset (&curtime, 0, sizeof (curtime)); + clock_gettime (CLOCK_MONOTONIC_RAW, &curtime); + if (TIMESPEC_AFTER (curtime, runtime)) + goto done; + } - double d_total_s; - double d_iters; + double d_total_s; + double d_iters; - done: - d_total_s = total * 1e-9; - d_iters = iters; + done: + d_total_s = total * 1e-9; + d_iters = iters; - printf (FUNCNAME ": ITERS:%g: TOTAL:%gs, MAX:%gns, MIN:%gns, %g iter/s\n", - d_total_i, d_total_s, max / d_iters, min / d_iters, - d_total_i / d_total_s); + printf ("%s: ITERS:%g: TOTAL:%gs, MAX:%gns, MIN:%gns, %g iter/s\n", + VARIANT (v), + d_total_i, d_total_s, max / d_iters, min / d_iters, + d_total_i / d_total_s); + } return 0; } diff --git a/benchtests/cos-inputs b/benchtests/cos-inputs index 98f4122aa1..82a40609cd 100644 --- a/benchtests/cos-inputs +++ b/benchtests/cos-inputs @@ -3,3 +3,11 @@ 0x1.00000162a932ap0 0x1.000002d452a11p0 0x1.000005bc7d86cp0 +# cos slow path at 768 bits +# Implemented in sysdeps/ieee754/dbl-64/sincos32.c +## name: 768bits +0x1.000000cf4a2a2p0 +0x1.0000010b239a9p0 +0x1.00000162a932bp0 +0x1.000002d452a10p0 +0x1.000005bc7d86dp0 diff --git a/benchtests/exp-inputs b/benchtests/exp-inputs index d81cc0710e..e9d33a3d1c 100644 --- a/benchtests/exp-inputs +++ b/benchtests/exp-inputs @@ -1 +1,5 @@ 42 +# Slowest path with computation in 768 bit precision. +# Implemented in: sysdeps/ieee754/dbl-64/mpexp.c +## name: 768bits +708.00096423260981737257679924368858 diff --git a/benchtests/pow-inputs b/benchtests/pow-inputs index 2f7cc03b52..dad65059aa 100644 --- a/benchtests/pow-inputs +++ b/benchtests/pow-inputs @@ -1 +1,5 @@ 42.0, 42.0 +# pow slowest path at 768 bits +# Implemented in sysdeps/ieee754/dbl-64/slowpow.c +## name: 768bits +1.0000000000000020, 1.5 diff --git a/benchtests/sin-inputs b/benchtests/sin-inputs index 620cea8d98..08192d8f09 100644 --- a/benchtests/sin-inputs +++ b/benchtests/sin-inputs @@ -5,3 +5,13 @@ 4.0 4.7 5.9 +# sin slowest path at 768 bits +# Implemented in sysdeps/ieee754/dbl-64/sincos32.c +## name: 768bits +0.93340582292648832662962377071381 +2.3328432680770916363144351635128 +3.7439477503636453548097051680088 +3.9225160069792437411706487182528 +4.0711651639931289992091478779912 +4.7858438478542097982426639646292 +5.9840767662578002727968851104379 diff --git a/benchtests/slowatan-inputs b/benchtests/slowatan-inputs deleted file mode 100644 index e557a3cb26..0000000000 --- a/benchtests/slowatan-inputs +++ /dev/null @@ -1,3 +0,0 @@ -0x1.000000c5cba87p0 -0x1.000001883003bp0 -0x1.00000dfb2b675p0 diff --git a/benchtests/slowatan.c b/benchtests/slowatan.c deleted file mode 100644 index 9a11d30bd4..0000000000 --- a/benchtests/slowatan.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowatan. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowatan atan diff --git a/benchtests/slowcos-inputs b/benchtests/slowcos-inputs deleted file mode 100644 index b7eb235367..0000000000 --- a/benchtests/slowcos-inputs +++ /dev/null @@ -1,5 +0,0 @@ -0x1.000000cf4a2a2p0 -0x1.0000010b239a9p0 -0x1.00000162a932bp0 -0x1.000002d452a10p0 -0x1.000005bc7d86dp0 diff --git a/benchtests/slowcos.c b/benchtests/slowcos.c deleted file mode 100644 index 9f56234afa..0000000000 --- a/benchtests/slowcos.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowcos. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowcos cos diff --git a/benchtests/slowexp-inputs b/benchtests/slowexp-inputs deleted file mode 100644 index a2086baa86..0000000000 --- a/benchtests/slowexp-inputs +++ /dev/null @@ -1 +0,0 @@ -708.00096423260981737257679924368858 diff --git a/benchtests/slowexp.c b/benchtests/slowexp.c deleted file mode 100644 index 92ac5e9b4c..0000000000 --- a/benchtests/slowexp.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowexp. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowexp exp diff --git a/benchtests/slowpow-inputs b/benchtests/slowpow-inputs deleted file mode 100644 index dbb1270b75..0000000000 --- a/benchtests/slowpow-inputs +++ /dev/null @@ -1 +0,0 @@ -1.0000000000000020, 1.5 diff --git a/benchtests/slowpow.c b/benchtests/slowpow.c deleted file mode 100644 index 08f436d2a4..0000000000 --- a/benchtests/slowpow.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowpow. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowpow pow diff --git a/benchtests/slowsin-inputs b/benchtests/slowsin-inputs deleted file mode 100644 index 39daf80b3b..0000000000 --- a/benchtests/slowsin-inputs +++ /dev/null @@ -1,7 +0,0 @@ -0.93340582292648832662962377071381 -2.3328432680770916363144351635128 -3.7439477503636453548097051680088 -3.9225160069792437411706487182528 -4.0711651639931289992091478779912 -4.7858438478542097982426639646292 -5.9840767662578002727968851104379 diff --git a/benchtests/slowsin.c b/benchtests/slowsin.c deleted file mode 100644 index b6809bdd7b..0000000000 --- a/benchtests/slowsin.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowsin. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowsin sin diff --git a/benchtests/slowtan-inputs b/benchtests/slowtan-inputs deleted file mode 100644 index 74a7eab3f9..0000000000 --- a/benchtests/slowtan-inputs +++ /dev/null @@ -1 +0,0 @@ -0x1.dffffffffff1fp-22 diff --git a/benchtests/slowtan.c b/benchtests/slowtan.c deleted file mode 100644 index 583f16f0d1..0000000000 --- a/benchtests/slowtan.c +++ /dev/null @@ -1,19 +0,0 @@ -/* Define slowtan. - Copyright (C) 2013 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 - modify it under the terms of the GNU Lesser General Public - License as published by the Free Software Foundation; either - version 2.1 of the License, or (at your option) any later version. - - The GNU C Library is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - Lesser General Public License for more details. - - You should have received a copy of the GNU Lesser General Public - License along with the GNU C Library; if not, see - <http://www.gnu.org/licenses/>. */ - -#define slowtan tan diff --git a/benchtests/tan-inputs b/benchtests/tan-inputs index 4369d75776..629414fc73 100644 --- a/benchtests/tan-inputs +++ b/benchtests/tan-inputs @@ -1 +1,5 @@ 0x1.dffffffffff1ep-22 +# tan slowest path at 768 bits +# Implemented in sysdeps/ieee754/dbl-64/mptan.c +## name: 768bits +0x1.dffffffffff1fp-22 |