This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
[COMMITTED 2/3] benchtests: Reallocate buffers for every strncmp implementation
- From: Siddhesh Poyarekar <siddhesh at sourceware dot org>
- To: libc-alpha at sourceware dot org
- Date: Tue, 6 Mar 2018 19:11:37 +0530
- Subject: [COMMITTED 2/3] benchtests: Reallocate buffers for every strncmp implementation
- Authentication-results: sourceware.org; auth=none
- References: <20180306134138.27724-1-siddhesh@sourceware.org>
Don't reuse buffers for different strncmp implementations since the
earlier implementation will end up warming the cache for the later
one. Eventually there should be a more elegant way to do this.
* benchtests/bench-strncmp.c (do_test_limit): Reallocate buffers
for every implementation.
(do_test): Likewise.
---
benchtests/bench-strncmp.c | 97 +++++++++++++++++++++++++---------------------
1 file changed, 53 insertions(+), 44 deletions(-)
diff --git a/benchtests/bench-strncmp.c b/benchtests/bench-strncmp.c
index 713a07210d..4354d708fb 100644
--- a/benchtests/bench-strncmp.c
+++ b/benchtests/bench-strncmp.c
@@ -139,8 +139,6 @@ do_test_limit (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
if (n == 0)
{
- s1 = (CHAR *) (buf1 + page_size);
- s2 = (CHAR *) (buf2 + page_size);
json_element_object_begin (json_ctx);
json_attr_uint (json_ctx, "strlen", (double) len);
json_attr_uint (json_ctx, "len", (double) n);
@@ -149,7 +147,12 @@ do_test_limit (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
json_array_begin (json_ctx, "timings");
FOR_EACH_IMPL (impl, 0)
- do_one_test (json_ctx, impl, s1, s2, n, 0);
+ {
+ realloc_bufs ();
+ s1 = (CHAR *) (buf1 + page_size);
+ s2 = (CHAR *) (buf2 + page_size);
+ do_one_test (json_ctx, impl, s1, s2, n, 0);
+ }
json_array_end (json_ctx);
json_element_object_end (json_ctx);
@@ -161,28 +164,6 @@ do_test_limit (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
align2 &= 15;
align_n = (page_size - n * CHARBYTES) & 15;
- s1 = (CHAR *) (buf1 + page_size - n * CHARBYTES);
- s2 = (CHAR *) (buf2 + page_size - n * CHARBYTES);
-
- if (align1 < align_n)
- s1 = (CHAR *) ((char *) s1 - (align_n - align1));
-
- if (align2 < align_n)
- s2 = (CHAR *) ((char *) s2 - (align_n - align2));
-
- for (i = 0; i < n; i++)
- s1[i] = s2[i] = 1 + 23 * i % max_char;
-
- if (len < n)
- {
- s1[len] = 0;
- s2[len] = 0;
- if (exp_result < 0)
- s2[len] = 32;
- else if (exp_result > 0)
- s1[len] = 64;
- }
-
json_element_object_begin (json_ctx);
json_attr_uint (json_ctx, "strlen", (double) len);
json_attr_uint (json_ctx, "len", (double) n);
@@ -191,7 +172,32 @@ do_test_limit (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len,
json_array_begin (json_ctx, "timings");
FOR_EACH_IMPL (impl, 0)
- do_one_test (json_ctx, impl, s1, s2, n, exp_result);
+ {
+ realloc_bufs ();
+ s1 = (CHAR *) (buf1 + page_size - n * CHARBYTES);
+ s2 = (CHAR *) (buf2 + page_size - n * CHARBYTES);
+
+ if (align1 < align_n)
+ s1 = (CHAR *) ((char *) s1 - (align_n - align1));
+
+ if (align2 < align_n)
+ s2 = (CHAR *) ((char *) s2 - (align_n - align2));
+
+ for (i = 0; i < n; i++)
+ s1[i] = s2[i] = 1 + 23 * i % max_char;
+
+ if (len < n)
+ {
+ s1[len] = 0;
+ s2[len] = 0;
+ if (exp_result < 0)
+ s2[len] = 32;
+ else if (exp_result > 0)
+ s1[len] = 64;
+ }
+
+ do_one_test (json_ctx, impl, s1, s2, n, exp_result);
+ }
json_array_end (json_ctx);
json_element_object_end (json_ctx);
@@ -215,23 +221,6 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len, size_t
if (align2 + (n + 1) * CHARBYTES >= page_size)
return;
- s1 = (CHAR *) (buf1 + align1);
- s2 = (CHAR *) (buf2 + align2);
-
- for (i = 0; i < n; i++)
- s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % max_char;
-
- s1[n] = 24 + exp_result;
- s2[n] = 23;
- s1[len] = 0;
- s2[len] = 0;
- if (exp_result < 0)
- s2[len] = 32;
- else if (exp_result > 0)
- s1[len] = 64;
- if (len >= n)
- s2[n - 1] -= exp_result;
-
json_element_object_begin (json_ctx);
json_attr_uint (json_ctx, "strlen", (double) len);
json_attr_uint (json_ctx, "len", (double) n);
@@ -240,7 +229,27 @@ do_test (json_ctx_t *json_ctx, size_t align1, size_t align2, size_t len, size_t
json_array_begin (json_ctx, "timings");
FOR_EACH_IMPL (impl, 0)
- do_one_test (json_ctx, impl, s1, s2, n, exp_result);
+ {
+ realloc_bufs ();
+ s1 = (CHAR *) (buf1 + align1);
+ s2 = (CHAR *) (buf2 + align2);
+
+ for (i = 0; i < n; i++)
+ s1[i] = s2[i] = 1 + (23 << ((CHARBYTES - 1) * 8)) * i % max_char;
+
+ s1[n] = 24 + exp_result;
+ s2[n] = 23;
+ s1[len] = 0;
+ s2[len] = 0;
+ if (exp_result < 0)
+ s2[len] = 32;
+ else if (exp_result > 0)
+ s1[len] = 64;
+ if (len >= n)
+ s2[n - 1] -= exp_result;
+
+ do_one_test (json_ctx, impl, s1, s2, n, exp_result);
+ }
json_array_end (json_ctx);
json_element_object_end (json_ctx);
--
2.14.3