This is the mail archive of the
glibc-cvs@sourceware.org
mailing list for the glibc project.
GNU C Library master sources branch master updated. glibc-2.18-73-g4455870
- From: willnewton at sourceware dot org
- To: glibc-cvs at sourceware dot org
- Date: 4 Sep 2013 14:40:43 -0000
- Subject: GNU C Library master sources branch master updated. glibc-2.18-73-g4455870
This is an automated email from the git hooks/post-receive script. It was
generated because a ref change was pushed to the repository containing
the project "GNU C Library master sources".
The branch, master has been updated
via 44558701ff93118de40d5d5484e210149570f951 (commit)
via cae16d66756dfb76b6b4c804e5eb1218d587c60f (commit)
from ddd9fb8f135a60925fc5491300068b7809601632 (commit)
Those revisions listed above that are new to this repository have
not appeared on any other notification email; so we list those
revisions in full, below.
- Log -----------------------------------------------------------------
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=44558701ff93118de40d5d5484e210149570f951
commit 44558701ff93118de40d5d5484e210149570f951
Author: Will Newton <will.newton@linaro.org>
Date: Mon Sep 2 14:13:50 2013 +0100
benchtests: Switch string benchmarks to use bench-timing.h.
Switch the string benchmarks to using bench-timing.h instead
of hp-timing.h directly. This allows the string benchmarks to
be run usefully on architectures such as ARM that do not have
support for hp-timing.h.
In order to do this the tests have been changed from timing each
individual call and picking the lowest execution time recorded to
timing a number of calls and taking the mean execution time.
ChangeLog:
2013-09-04 Will Newton <will.newton@linaro.org>
* benchtests/bench-timing.h (TIMING_PRINT_MEAN): New macro.
* benchtests/bench-string.h: Include bench-timing.h instead
of including hp-timing.h directly. (INNER_LOOP_ITERS): New
define. (HP_TIMING_BEST): Delete macro. (test_init): Remove
call to HP_TIMING_DIFF_INIT.
* benchtests/bench-memccpy.c: Use bench-timing.h macros
instead of hp-timing.h macros.
* benchtests/bench-memchr.c: Likewise.
* benchtests/bench-memcmp.c: Likewise.
* benchtests/bench-memcpy.c: Likewise.
* benchtests/bench-memmem.c: Likewise.
* benchtests/bench-memmove.c: Likewise.
* benchtests/bench-memset.c: Likewise.
* benchtests/bench-rawmemchr.c: Likewise.
* benchtests/bench-strcasecmp.c: Likewise.
* benchtests/bench-strcasestr.c: Likewise.
* benchtests/bench-strcat.c: Likewise.
* benchtests/bench-strchr.c: Likewise.
* benchtests/bench-strcmp.c: Likewise.
* benchtests/bench-strcpy.c: Likewise.
* benchtests/bench-strcpy_chk.c: Likewise.
* benchtests/bench-strlen.c: Likewise.
* benchtests/bench-strncasecmp.c: Likewise.
* benchtests/bench-strncat.c: Likewise.
* benchtests/bench-strncmp.c: Likewise.
* benchtests/bench-strncpy.c: Likewise.
* benchtests/bench-strnlen.c: Likewise.
* benchtests/bench-strpbrk.c: Likewise.
* benchtests/bench-strrchr.c: Likewise.
* benchtests/bench-strspn.c: Likewise.
* benchtests/bench-strstr.c: Likewise.
diff --git a/ChangeLog b/ChangeLog
index 743d718..28120a5 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,37 @@
+2013-09-04 Will Newton <will.newton@linaro.org>
+
+ * benchtests/bench-timing.h (TIMING_PRINT_MEAN): New macro.
+ * benchtests/bench-string.h: Include bench-timing.h instead
+ of including hp-timing.h directly. (INNER_LOOP_ITERS): New
+ define. (HP_TIMING_BEST): Delete macro. (test_init): Remove
+ call to HP_TIMING_DIFF_INIT.
+ * benchtests/bench-memccpy.c: Use bench-timing.h macros
+ instead of hp-timing.h macros.
+ * benchtests/bench-memchr.c: Likewise.
+ * benchtests/bench-memcmp.c: Likewise.
+ * benchtests/bench-memcpy.c: Likewise.
+ * benchtests/bench-memmem.c: Likewise.
+ * benchtests/bench-memmove.c: Likewise.
+ * benchtests/bench-memset.c: Likewise.
+ * benchtests/bench-rawmemchr.c: Likewise.
+ * benchtests/bench-strcasecmp.c: Likewise.
+ * benchtests/bench-strcasestr.c: Likewise.
+ * benchtests/bench-strcat.c: Likewise.
+ * benchtests/bench-strchr.c: Likewise.
+ * benchtests/bench-strcmp.c: Likewise.
+ * benchtests/bench-strcpy.c: Likewise.
+ * benchtests/bench-strcpy_chk.c: Likewise.
+ * benchtests/bench-strlen.c: Likewise.
+ * benchtests/bench-strncasecmp.c: Likewise.
+ * benchtests/bench-strncat.c: Likewise.
+ * benchtests/bench-strncmp.c: Likewise.
+ * benchtests/bench-strncpy.c: Likewise.
+ * benchtests/bench-strnlen.c: Likewise.
+ * benchtests/bench-strpbrk.c: Likewise.
+ * benchtests/bench-strrchr.c: Likewise.
+ * benchtests/bench-strspn.c: Likewise.
+ * benchtests/bench-strstr.c: Likewise.
+
2013-09-04 Will Newton <will.newton@linaro.org>
* benchtests/Makefile: Use LDLIBS instead of LDFLAGS.
diff --git a/benchtests/bench-memccpy.c b/benchtests/bench-memccpy.c
index 612513c..2c47e79 100644
--- a/benchtests/bench-memccpy.c
+++ b/benchtests/bench-memccpy.c
@@ -59,6 +59,9 @@ do_one_test (impl_t *impl, void *dst, const void *src, int c, size_t len,
size_t n)
{
void *expect = len > n ? NULL : (char *) dst + len;
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src, c, n) != expect)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -74,23 +77,16 @@ do_one_test (impl_t *impl, void *dst, const void *src, int c, size_t len,
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute__ ((unused));
- hp_timing_t stop __attribute__ ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, dst, src, c, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, dst, src, c, n);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -121,14 +117,12 @@ do_test (size_t align1, size_t align2, int c, size_t len, size_t n,
for (i = len; i + align1 < page_size && i < len + 64; ++i)
s1[i] = 32 + 32 * i % (max_char - 32);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, n %4zd, char %d, alignment %2zd/%2zd:", len, n, c, align1, align2);
+ printf ("Length %4zd, n %4zd, char %d, alignment %2zd/%2zd:", len, n, c, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, c, len, n);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-memchr.c b/benchtests/bench-memchr.c
index 5470ce6..db099ad 100644
--- a/benchtests/bench-memchr.c
+++ b/benchtests/bench-memchr.c
@@ -39,6 +39,9 @@ static void
do_one_test (impl_t *impl, const char *s, int c, size_t n, char *exp_res)
{
char *res = CALL (impl, s, c, n);
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -47,23 +50,16 @@ do_one_test (impl_t *impl, const char *s, int c, size_t n, char *exp_res)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, c, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, c, n);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -96,14 +92,12 @@ do_test (size_t align, size_t pos, size_t len, int seek_char)
buf1[align + len] = seek_char;
}
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd:", pos, align);
+ printf ("Length %4zd, alignment %2zd:", pos, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char *) (buf1 + align), seek_char, len, result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-memcmp.c b/benchtests/bench-memcmp.c
index 053bb50..544130b 100644
--- a/benchtests/bench-memcmp.c
+++ b/benchtests/bench-memcmp.c
@@ -78,23 +78,19 @@ static void
do_one_test (impl_t *impl, const CHAR *s1, const CHAR *s2, size_t len,
int exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2, len);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s1, s2, len);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -124,14 +120,12 @@ do_test (size_t align1, size_t align2, size_t len, int exp_result)
s2[len] = align2;
s2[len - 1] -= exp_result;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, len, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-memcpy.c b/benchtests/bench-memcpy.c
index 1b12671..8cd9c23 100644
--- a/benchtests/bench-memcpy.c
+++ b/benchtests/bench-memcpy.c
@@ -52,6 +52,9 @@ static void
do_one_test (impl_t *impl, char *dst, const char *src,
size_t len)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src, len) != MEMCPY_RESULT (dst, len))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -68,23 +71,16 @@ do_one_test (impl_t *impl, char *dst, const char *src,
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, dst, src, len);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, dst, src, len);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -107,14 +103,12 @@ do_test (size_t align1, size_t align2, size_t len)
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-memmem.c b/benchtests/bench-memmem.c
index ca758a8..b8f8a8b 100644
--- a/benchtests/bench-memmem.c
+++ b/benchtests/bench-memmem.c
@@ -60,23 +60,19 @@ static void
do_one_test (impl_t *impl, const void *haystack, size_t haystack_len,
const void *needle, size_t needle_len, const void *expected)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
+ CALL (impl, haystack, haystack_len, needle, needle_len);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, haystack, haystack_len, needle, needle_len);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -87,16 +83,14 @@ do_test (const char *str, size_t len, size_t idx)
memcpy (tmpbuf, buf1 + idx, len);
memcpy (buf1 + idx, str, len);
- if (HP_TIMING_AVAIL)
- printf ("String %s, offset %zd:", str, idx);
+ printf ("String %s, offset %zd:", str, idx);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf1, BUF1PAGES * page_size, str, len, buf1 + idx);
memcpy (buf1 + idx, tmpbuf, len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
static void
@@ -120,15 +114,13 @@ do_random_tests (void)
buf1[idx + off] = ch;
}
- if (HP_TIMING_AVAIL)
- printf ("String %.*s, offset %zd:", (int) len, buf1 + idx, idx);
+ printf ("String %.*s, offset %zd:", (int) len, buf1 + idx, idx);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf1, BUF1PAGES * page_size, buf1 + idx, len,
buf1 + idx);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
memcpy (buf1 + idx, tmpbuf, len);
}
diff --git a/benchtests/bench-memmove.c b/benchtests/bench-memmove.c
index 8925606..332d6af 100644
--- a/benchtests/bench-memmove.c
+++ b/benchtests/bench-memmove.c
@@ -67,6 +67,9 @@ static void
do_one_test (impl_t *impl, char *dst, char *src, const char *orig_src,
size_t len)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
memcpy (src, orig_src, len);
#ifdef TEST_BCOPY
CALL (impl, src, dst, len);
@@ -91,27 +94,20 @@ do_one_test (impl_t *impl, char *dst, char *src, const char *orig_src,
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
#ifdef TEST_BCOPY
- CALL (impl, src, dst, len);
+ CALL (impl, src, dst, len);
#else
- CALL (impl, dst, src, len);
+ CALL (impl, dst, src, len);
#endif
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -134,14 +130,12 @@ do_test (size_t align1, size_t align2, size_t len)
for (i = 0, j = 1; i < len; i++, j += 23)
s1[i] = j;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, (char *) (buf2 + align1), s1, len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-memset.c b/benchtests/bench-memset.c
index ea29cf3..e45807c 100644
--- a/benchtests/bench-memset.c
+++ b/benchtests/bench-memset.c
@@ -75,6 +75,8 @@ simple_memset (char *s, int c, size_t n)
static void
do_one_test (impl_t *impl, char *s, int c __attribute ((unused)), size_t n)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
char tstbuf[n];
#ifdef TEST_BZERO
simple_bzero (tstbuf, n);
@@ -92,28 +94,20 @@ do_one_test (impl_t *impl, char *s, int c __attribute ((unused)), size_t n)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
#ifdef TEST_BZERO
- CALL (impl, s, n);
+ CALL (impl, s, n);
#else
- CALL (impl, s, c, n);
+ CALL (impl, s, c, n);
#endif
+ }
+ TIMING_NOW (stop);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -123,14 +117,12 @@ do_test (size_t align, int c, size_t len)
if (align + len > page_size)
return;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
+ printf ("Length %4zd, alignment %2zd, c %2d:", len, align, c);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char *) buf1 + align, c, len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-rawmemchr.c b/benchtests/bench-rawmemchr.c
index a6b29d7..df6a310 100644
--- a/benchtests/bench-rawmemchr.c
+++ b/benchtests/bench-rawmemchr.c
@@ -40,6 +40,8 @@ simple_rawmemchr (const char *s, int c)
static void
do_one_test (impl_t *impl, const char *s, int c, char *exp_res)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
char *res = CALL (impl, s, c);
if (res != exp_res)
{
@@ -49,23 +51,16 @@ do_one_test (impl_t *impl, const char *s, int c, char *exp_res)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, c);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, c);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -92,14 +87,12 @@ do_test (size_t align, size_t pos, size_t len, int seek_char)
buf1[align + len] = -seek_char;
result = (char *) (buf1 + align + pos);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd:", pos, align);
+ printf ("Length %4zd, alignment %2zd:", pos, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char *) (buf1 + align), seek_char, result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strcasecmp.c b/benchtests/bench-strcasecmp.c
index 27250bb..1458df1 100644
--- a/benchtests/bench-strcasecmp.c
+++ b/benchtests/bench-strcasecmp.c
@@ -62,6 +62,8 @@ stupid_strcasecmp (const char *s1, const char *s2)
static void
do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
int result = CALL (impl, s1, s2);
if ((exp_result == 0 && result != 0)
|| (exp_result < 0 && result >= 0)
@@ -73,23 +75,16 @@ do_one_test (impl_t *impl, const char *s1, const char *s2, int exp_result)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s1, s2);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -128,14 +123,12 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
else
s2[len - 1] -= exp_result;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strcasestr.c b/benchtests/bench-strcasestr.c
index 289b490..68b7e95 100644
--- a/benchtests/bench-strcasestr.c
+++ b/benchtests/bench-strcasestr.c
@@ -60,23 +60,19 @@ IMPL (strcasestr, 1)
static void
do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~(hp_timing_t) 0;
- size_t i;
+ CALL (impl, s1, s2);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
@@ -116,15 +112,13 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2,
}
s1[len1] = '\0';
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
- len1, len2, align1, align2, fail ? "fail" : "found");
+ printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+ len1, len2, align1, align2, fail ? "fail" : "found");
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
static int
diff --git a/benchtests/bench-strcat.c b/benchtests/bench-strcat.c
index b70a272..6602009 100644
--- a/benchtests/bench-strcat.c
+++ b/benchtests/bench-strcat.c
@@ -39,7 +39,9 @@ simple_strcat (char *dst, const char *src)
static void
do_one_test (impl_t *impl, char *dst, const char *src)
{
- size_t k = strlen (dst);
+ size_t k = strlen (dst), i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src) != dst)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -56,24 +58,17 @@ do_one_test (impl_t *impl, char *dst, const char *src)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- dst[k] = '\0';
- HP_TIMING_NOW (start);
- CALL (impl, dst, src);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ dst[k] = '\0';
+ CALL (impl, dst, src);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -100,8 +95,7 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2, int max_char)
for (i = 0; i < len2; i++)
s2[i] = 32 + 23 * i % (max_char - 32);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len1, len2, align1, align2);
+ printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len1, len2, align1, align2);
FOR_EACH_IMPL (impl, 0)
{
@@ -109,8 +103,7 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2, int max_char)
do_one_test (impl, s2, s1);
}
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strchr.c b/benchtests/bench-strchr.c
index 710b592..d432ba5 100644
--- a/benchtests/bench-strchr.c
+++ b/benchtests/bench-strchr.c
@@ -89,23 +89,19 @@ IMPL (STRCHR, 1)
static void
do_one_test (impl_t *impl, const CHAR *s, int c, const CHAR *exp_res)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, c);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, c);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -141,15 +137,13 @@ do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
else
result = NULLRET (buf + align + len);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment in bytes %2zd:",
- pos, align * sizeof (CHAR));
+ printf ("Length %4zd, alignment in bytes %2zd:",
+ pos, align * sizeof (CHAR));
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, buf + align, seek_char, result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strcmp.c b/benchtests/bench-strcmp.c
index 63a3cd4..c1e0b26 100644
--- a/benchtests/bench-strcmp.c
+++ b/benchtests/bench-strcmp.c
@@ -138,23 +138,19 @@ do_one_test (impl_t *impl,
const CHAR *s1, const CHAR *s2,
int exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s1, s2);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -190,14 +186,12 @@ do_test (size_t align1, size_t align2, size_t len, int max_char,
s2[len + 1] = 24 + exp_result;
s2[len - 1] -= exp_result;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strcpy.c b/benchtests/bench-strcpy.c
index 4e024d4..88db83b 100644
--- a/benchtests/bench-strcpy.c
+++ b/benchtests/bench-strcpy.c
@@ -74,6 +74,9 @@ static void
do_one_test (impl_t *impl, CHAR *dst, const CHAR *src,
size_t len __attribute__((unused)))
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src) != STRCPY_RESULT (dst, len))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -91,23 +94,16 @@ do_one_test (impl_t *impl, CHAR *dst, const CHAR *src,
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));;
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
CALL (impl, dst, src);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -133,14 +129,12 @@ do_test (size_t align1, size_t align2, size_t len, int max_char)
s1[i] = 32 + 23 * i % (max_char - 32);
s1[len] = 0;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
+ printf ("Length %4zd, alignments in bytes %2zd/%2zd:", len, align1 * sizeof(CHAR), align2 * sizeof(CHAR));
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strcpy_chk.c b/benchtests/bench-strcpy_chk.c
index 29e5728..3c2a0b3 100644
--- a/benchtests/bench-strcpy_chk.c
+++ b/benchtests/bench-strcpy_chk.c
@@ -75,6 +75,9 @@ do_one_test (impl_t *impl, char *dst, const char *src,
size_t len, size_t dlen)
{
char *res;
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (dlen <= len)
{
if (impl->test == 1)
@@ -110,23 +113,16 @@ do_one_test (impl_t *impl, char *dst, const char *src,
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));;
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
+ CALL (impl, dst, src, dlen);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, dst, src, dlen);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -150,13 +146,13 @@ do_test (size_t align1, size_t align2, size_t len, size_t dlen, int max_char)
s1[i] = 32 + 23 * i % (max_char - 32);
s1[len] = 0;
- if (HP_TIMING_AVAIL && dlen > len)
+ if (dlen > len)
printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len, dlen);
- if (HP_TIMING_AVAIL && dlen > len)
+ if (dlen > len)
putchar ('\n');
}
diff --git a/benchtests/bench-string.h b/benchtests/bench-string.h
index 2fe8d9f..53e796a 100644
--- a/benchtests/bench-string.h
+++ b/benchtests/bench-string.h
@@ -52,7 +52,7 @@ extern impl_t __start_impls[], __stop_impls[];
# include <ifunc-impl-list.h>
# define GL(x) _##x
# define GLRO(x) _##x
-# include <hp-timing.h>
+# include "bench-timing.h"
# define TEST_FUNCTION test_main ()
@@ -61,6 +61,8 @@ extern impl_t __start_impls[], __stop_impls[];
# define OPT_RANDOM 10001
# define OPT_SEED 10002
+# define INNER_LOOP_ITERS 64
+
unsigned char *buf1, *buf2;
int ret, do_srandom;
unsigned int seed;
@@ -158,16 +160,6 @@ static impl_t *impl_array;
if (!notall || impl->test)
# endif /* ! (defined TEST_IFUNC && defined TEST_NAME) */
-# define HP_TIMING_BEST(best_time, start, end) \
- do \
- { \
- hp_timing_t tmptime; \
- HP_TIMING_DIFF (tmptime, start + _dl_hp_timing_overhead, end); \
- if (best_time > tmptime) \
- best_time = tmptime; \
- } \
- while (0)
-
# ifndef BUF1PAGES
# define BUF1PAGES 1
# endif
@@ -198,7 +190,6 @@ test_init (void)
error (EXIT_FAILURE, errno, "mmap failed");
if (mprotect (buf2 + page_size, page_size, PROT_NONE))
error (EXIT_FAILURE, errno, "mprotect failed");
- HP_TIMING_DIFF_INIT ();
if (do_srandom)
{
printf ("Setting seed to 0x%x\n", seed);
diff --git a/benchtests/bench-strlen.c b/benchtests/bench-strlen.c
index 63b1e93..44c9c2b 100644
--- a/benchtests/bench-strlen.c
+++ b/benchtests/bench-strlen.c
@@ -62,7 +62,9 @@ IMPL (STRLEN, 1)
static void
do_one_test (impl_t *impl, const CHAR *s, size_t exp_len)
{
- size_t len = CALL (impl, s);
+ size_t len = CALL (impl, s), i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (len != exp_len)
{
error (0, 0, "Wrong result in function %s %zd %zd", impl->name,
@@ -71,23 +73,16 @@ do_one_test (impl_t *impl, const CHAR *s, size_t exp_len)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -105,14 +100,12 @@ do_test (size_t align, size_t len)
buf[align + i] = 1 + 11111 * i % MAX_CHAR;
buf[align + len] = 0;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd:", len, align);
+ printf ("Length %4zd, alignment %2zd:", len, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (CHAR *) (buf + align), len);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strncasecmp.c b/benchtests/bench-strncasecmp.c
index 5fa9220..9badd05 100644
--- a/benchtests/bench-strncasecmp.c
+++ b/benchtests/bench-strncasecmp.c
@@ -73,23 +73,19 @@ static void
do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
int exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s1, s2, n);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -128,14 +124,12 @@ do_test (size_t align1, size_t align2, size_t n, size_t len, int max_char,
else
s2[len - 1] -= exp_result;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
+ printf ("Length %4zd, alignment %2zd/%2zd:", len, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, n, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strncat.c b/benchtests/bench-strncat.c
index 904daa7..2a17817 100644
--- a/benchtests/bench-strncat.c
+++ b/benchtests/bench-strncat.c
@@ -43,7 +43,9 @@ stupid_strncat (char *dst, const char *src, size_t n)
static void
do_one_test (impl_t *impl, char *dst, const char *src, size_t n)
{
- size_t k = strlen (dst);
+ size_t k = strlen (dst), i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src, n) != dst)
{
error (0, 0, "Wrong result in function %s %p != %p", impl->name,
@@ -67,24 +69,18 @@ do_one_test (impl_t *impl, char *dst, const char *src, size_t n)
ret = 1;
return;
}
- if (HP_TIMING_AVAIL)
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
+ dst[k] = '\0';
+ CALL (impl, dst, src, n);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- dst[k] = '\0';
- HP_TIMING_NOW (start);
- CALL (impl, dst, src, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -114,9 +110,8 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2,
for (i = 0; i < len2; i++)
s2[i] = 32 + 23 * i % (max_char - 32);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%4zd, alignment %2zd/%2zd, N %4zd:",
- len1, len2, align1, align2, n);
+ printf ("Length %4zd/%4zd, alignment %2zd/%2zd, N %4zd:",
+ len1, len2, align1, align2, n);
FOR_EACH_IMPL (impl, 0)
{
@@ -124,8 +119,7 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2,
do_one_test (impl, s2, s1, n);
}
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strncmp.c b/benchtests/bench-strncmp.c
index b3af0f9..25df3db 100644
--- a/benchtests/bench-strncmp.c
+++ b/benchtests/bench-strncmp.c
@@ -54,23 +54,19 @@ static void
do_one_test (impl_t *impl, const char *s1, const char *s2, size_t n,
int exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s1, s2, n);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -84,14 +80,12 @@ do_test_limit (size_t align1, size_t align2, size_t len, size_t n, int max_char,
{
s1 = (char*)(buf1 + page_size);
s2 = (char*)(buf2 + page_size);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%4zd:", len, n);
+ printf ("Length %4zd/%4zd:", len, n);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, n, 0);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
return;
}
@@ -122,14 +116,12 @@ do_test_limit (size_t align1, size_t align2, size_t len, size_t n, int max_char,
s1[len] = 64;
}
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+ printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, n, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
static void
@@ -167,14 +159,12 @@ do_test (size_t align1, size_t align2, size_t len, size_t n, int max_char,
if (len >= n)
s2[n - 1] -= exp_result;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+ printf ("Length %4zd/%4zd, alignment %2zd/%2zd:", len, n, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char*)s1, (char*)s2, n, exp_result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strncpy.c b/benchtests/bench-strncpy.c
index 4065c0a..645925b 100644
--- a/benchtests/bench-strncpy.c
+++ b/benchtests/bench-strncpy.c
@@ -62,6 +62,9 @@ typedef char *(*proto_t) (char *, const char *, size_t);
static void
do_one_test (impl_t *impl, char *dst, const char *src, size_t len, size_t n)
{
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (CALL (impl, dst, src, n) != STRNCPY_RESULT (dst, len, n))
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -90,23 +93,16 @@ do_one_test (impl_t *impl, char *dst, const char *src, size_t len, size_t n)
}
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute__ ((unused));
- hp_timing_t stop __attribute__ ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
+ CALL (impl, dst, src, n);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, dst, src, n);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -132,14 +128,12 @@ do_test (size_t align1, size_t align2, size_t len, size_t n, int max_char)
for (i = len + 1; i + align1 < page_size && i < len + 64; ++i)
s1[i] = 32 + 32 * i % (max_char - 32);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, n %4zd, alignment %2zd/%2zd:", len, n, align1, align2);
+ printf ("Length %4zd, n %4zd, alignment %2zd/%2zd:", len, n, align1, align2);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s2, s1, len, n);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strnlen.c b/benchtests/bench-strnlen.c
index 4233f27..793f9be 100644
--- a/benchtests/bench-strnlen.c
+++ b/benchtests/bench-strnlen.c
@@ -38,7 +38,9 @@ simple_strnlen (const char *s, size_t maxlen)
static void
do_one_test (impl_t *impl, const char *s, size_t maxlen, size_t exp_len)
{
- size_t len = CALL (impl, s, maxlen);
+ size_t len = CALL (impl, s, maxlen), i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (len != exp_len)
{
error (0, 0, "Wrong result in function %s %zd %zd", impl->name,
@@ -47,23 +49,16 @@ do_one_test (impl_t *impl, const char *s, size_t maxlen, size_t exp_len)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, maxlen);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, maxlen);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -79,14 +74,12 @@ do_test (size_t align, size_t len, size_t maxlen, int max_char)
buf1[align + i] = 1 + 7 * i % max_char;
buf1[align + len] = 0;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd:", len, align);
+ printf ("Length %4zd, alignment %2zd:", len, align);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (char *) (buf1 + align), maxlen, MIN (len, maxlen));
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strpbrk.c b/benchtests/bench-strpbrk.c
index 0163de8..fe966be 100644
--- a/benchtests/bench-strpbrk.c
+++ b/benchtests/bench-strpbrk.c
@@ -62,6 +62,9 @@ static void
do_one_test (impl_t *impl, const char *s, const char *rej, RES_TYPE exp_res)
{
RES_TYPE res = CALL (impl, s, rej);
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -70,23 +73,16 @@ do_one_test (impl_t *impl, const char *s, const char *rej, RES_TYPE exp_res)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
+ CALL (impl, s, rej);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, rej);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -136,14 +132,12 @@ do_test (size_t align, size_t pos, size_t len)
}
result = STRPBRK_RESULT (s, pos);
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd, rej len %2zd:", pos, align, len);
+ printf ("Length %4zd, alignment %2zd, rej len %2zd:", pos, align, len);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s, rej, result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strrchr.c b/benchtests/bench-strrchr.c
index 400ac80..6a7aa84 100644
--- a/benchtests/bench-strrchr.c
+++ b/benchtests/bench-strrchr.c
@@ -63,6 +63,9 @@ static void
do_one_test (impl_t *impl, const CHAR *s, int c, CHAR *exp_res)
{
CHAR *res = CALL (impl, s, c);
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -71,23 +74,16 @@ do_one_test (impl_t *impl, const CHAR *s, int c, CHAR *exp_res)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, c);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, c);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -126,14 +122,12 @@ do_test (size_t align, size_t pos, size_t len, int seek_char, int max_char)
else
result = NULL;
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment in bytes %2zd:", pos, align * sizeof(CHAR));
+ printf ("Length %4zd, alignment in bytes %2zd:", pos, align * sizeof(CHAR));
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, (CHAR *) (buf + align), seek_char, result);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strspn.c b/benchtests/bench-strspn.c
index 7cf26f4..634bca1 100644
--- a/benchtests/bench-strspn.c
+++ b/benchtests/bench-strspn.c
@@ -65,7 +65,9 @@ stupid_strspn (const char *s, const char *acc)
static void
do_one_test (impl_t *impl, const char *s, const char *acc, size_t exp_res)
{
- size_t res = CALL (impl, s, acc);
+ size_t res = CALL (impl, s, acc), i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
if (res != exp_res)
{
error (0, 0, "Wrong result in function %s %p %p", impl->name,
@@ -74,23 +76,16 @@ do_one_test (impl_t *impl, const char *s, const char *acc, size_t exp_res)
return;
}
- if (HP_TIMING_AVAIL)
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~ (hp_timing_t) 0;
- size_t i;
-
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s, acc);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
-
- printf ("\t%zd", (size_t) best_time);
+ CALL (impl, s, acc);
}
+ TIMING_NOW (stop);
+
+ TIMING_DIFF (cur, start, stop);
+
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
static void
@@ -128,14 +123,12 @@ do_test (size_t align, size_t pos, size_t len)
s[i] = '\0';
}
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd, alignment %2zd, acc len %2zd:", pos, align, len);
+ printf ("Length %4zd, alignment %2zd, acc len %2zd:", pos, align, len);
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s, acc, pos);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
int
diff --git a/benchtests/bench-strstr.c b/benchtests/bench-strstr.c
index 91a8dfe..528a5c0 100644
--- a/benchtests/bench-strstr.c
+++ b/benchtests/bench-strstr.c
@@ -58,23 +58,19 @@ IMPL (strstr, 1)
static void
do_one_test (impl_t *impl, const char *s1, const char *s2, char *exp_result)
{
- if (HP_TIMING_AVAIL)
+ size_t i, iters = INNER_LOOP_ITERS;
+ timing_t start, stop, cur;
+
+ TIMING_NOW (start);
+ for (i = 0; i < iters; ++i)
{
- hp_timing_t start __attribute ((unused));
- hp_timing_t stop __attribute ((unused));
- hp_timing_t best_time = ~(hp_timing_t) 0;
- size_t i;
+ CALL (impl, s1, s2);
+ }
+ TIMING_NOW (stop);
- for (i = 0; i < 32; ++i)
- {
- HP_TIMING_NOW (start);
- CALL (impl, s1, s2);
- HP_TIMING_NOW (stop);
- HP_TIMING_BEST (best_time, start, stop);
- }
+ TIMING_DIFF (cur, start, stop);
- printf ("\t%zd", (size_t) best_time);
- }
+ TIMING_PRINT_MEAN ((double) cur, (double) iters);
}
@@ -113,15 +109,13 @@ do_test (size_t align1, size_t align2, size_t len1, size_t len2,
}
s1[len1] = '\0';
- if (HP_TIMING_AVAIL)
- printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
- len1, len2, align1, align2, fail ? "fail" : "found");
+ printf ("Length %4zd/%zd, alignment %2zd/%2zd, %s:",
+ len1, len2, align1, align2, fail ? "fail" : "found");
FOR_EACH_IMPL (impl, 0)
do_one_test (impl, s1, s2, fail ? NULL : s1 + len1 - len2);
- if (HP_TIMING_AVAIL)
- putchar ('\n');
+ putchar ('\n');
}
static int
diff --git a/benchtests/bench-timing.h b/benchtests/bench-timing.h
index 264d4b8..009813b 100644
--- a/benchtests/bench-timing.h
+++ b/benchtests/bench-timing.h
@@ -70,3 +70,6 @@ typedef uint64_t timing_t;
(min) / (d_iters), 1e9 * (d_total_i) / (d_total_s))
#endif
+
+#define TIMING_PRINT_MEAN(d_total_s, d_iters) \
+ printf ("\t%g", (d_total_s) / (d_iters))
http://sourceware.org/git/gitweb.cgi?p=glibc.git;a=commitdiff;h=cae16d66756dfb76b6b4c804e5eb1218d587c60f
commit cae16d66756dfb76b6b4c804e5eb1218d587c60f
Author: Will Newton <will.newton@linaro.org>
Date: Mon Sep 2 14:00:45 2013 +0100
benchtests/Makefile: Use LDLIBS instead of LDFLAGS.
LDFLAGS puts the library too early in the command line if --as-needed
is being used. Use LDLIBS instead.
ChangeLog:
2013-09-04 Will Newton <will.newton@linaro.org>
* benchtests/Makefile: Use LDLIBS instead of LDFLAGS.
diff --git a/ChangeLog b/ChangeLog
index f8e9f9a..743d718 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,7 @@
+2013-09-04 Will Newton <will.newton@linaro.org>
+
+ * benchtests/Makefile: Use LDLIBS instead of LDFLAGS.
+
2013-09-03 Joseph Myers <joseph@codesourcery.com>
[BZ #15427]
diff --git a/benchtests/Makefile b/benchtests/Makefile
index ba313d2..4d4b909 100644
--- a/benchtests/Makefile
+++ b/benchtests/Makefile
@@ -36,67 +36,67 @@ benchset := $(string-bench-all)
acos-ARGLIST = double
acos-RET = double
-LDFLAGS-bench-acos = -lm
+LDLIBS-bench-acos = -lm
acosh-ARGLIST = double
acosh-RET = double
-LDFLAGS-bench-acosh = -lm
+LDLIBS-bench-acosh = -lm
asin-ARGLIST = double
asin-RET = double
-LDFLAGS-bench-asin = -lm
+LDLIBS-bench-asin = -lm
asinh-ARGLIST = double
asinh-RET = double
-LDFLAGS-bench-asinh = -lm
+LDLIBS-bench-asinh = -lm
atan-ARGLIST = double
atan-RET = double
-LDFLAGS-bench-atan = -lm
+LDLIBS-bench-atan = -lm
atanh-ARGLIST = double
atanh-RET = double
-LDFLAGS-bench-atanh = -lm
+LDLIBS-bench-atanh = -lm
cos-ARGLIST = double
cos-RET = double
-LDFLAGS-bench-cos = -lm
+LDLIBS-bench-cos = -lm
cosh-ARGLIST = double
cosh-RET = double
-LDFLAGS-bench-cosh = -lm
+LDLIBS-bench-cosh = -lm
exp-ARGLIST = double
exp-RET = double
-LDFLAGS-bench-exp = -lm
+LDLIBS-bench-exp = -lm
log-ARGLIST = double
log-RET = double
-LDFLAGS-bench-log = -lm
+LDLIBS-bench-log = -lm
pow-ARGLIST = double:double
pow-RET = double
-LDFLAGS-bench-pow = -lm
+LDLIBS-bench-pow = -lm
rint-ARGLIST = double
rint-RET = double
-LDFLAGS-bench-rint = -lm
+LDLIBS-bench-rint = -lm
sin-ARGLIST = double
sin-RET = double
-LDFLAGS-bench-sin = -lm
+LDLIBS-bench-sin = -lm
sinh-ARGLIST = double
sinh-RET = double
-LDFLAGS-bench-sinh = -lm
+LDLIBS-bench-sinh = -lm
tan-ARGLIST = double
tan-RET = double
-LDFLAGS-bench-tan = -lm
+LDLIBS-bench-tan = -lm
tanh-ARGLIST = double
tanh-RET = double
-LDFLAGS-bench-tanh = -lm
+LDLIBS-bench-tanh = -lm
-----------------------------------------------------------------------
Summary of changes:
ChangeLog | 38 ++++++++++++++++++++++++++++++++++
benchtests/Makefile | 32 ++++++++++++++--------------
benchtests/bench-memccpy.c | 32 +++++++++++-----------------
benchtests/bench-memchr.c | 32 +++++++++++-----------------
benchtests/bench-memcmp.c | 32 +++++++++++-----------------
benchtests/bench-memcpy.c | 32 +++++++++++-----------------
benchtests/bench-memmem.c | 36 ++++++++++++--------------------
benchtests/bench-memmove.c | 34 ++++++++++++------------------
benchtests/bench-memset.c | 32 ++++++++++------------------
benchtests/bench-rawmemchr.c | 31 ++++++++++-----------------
benchtests/bench-strcasecmp.c | 31 ++++++++++-----------------
benchtests/bench-strcasestr.c | 32 +++++++++++-----------------
benchtests/bench-strcat.c | 35 ++++++++++++-------------------
benchtests/bench-strchr.c | 34 ++++++++++++------------------
benchtests/bench-strcmp.c | 32 +++++++++++-----------------
benchtests/bench-strcpy.c | 30 ++++++++++----------------
benchtests/bench-strcpy_chk.c | 28 ++++++++++--------------
benchtests/bench-string.h | 15 ++----------
benchtests/bench-strlen.c | 33 +++++++++++------------------
benchtests/bench-strncasecmp.c | 32 +++++++++++-----------------
benchtests/bench-strncat.c | 36 +++++++++++++-------------------
benchtests/bench-strncmp.c | 44 +++++++++++++++------------------------
benchtests/bench-strncpy.c | 30 ++++++++++----------------
benchtests/bench-strnlen.c | 33 +++++++++++------------------
benchtests/bench-strpbrk.c | 30 ++++++++++----------------
benchtests/bench-strrchr.c | 32 +++++++++++-----------------
benchtests/bench-strspn.c | 33 +++++++++++------------------
benchtests/bench-strstr.c | 32 +++++++++++-----------------
benchtests/bench-timing.h | 3 ++
29 files changed, 388 insertions(+), 518 deletions(-)
hooks/post-receive
--
GNU C Library master sources