]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
benchtests: Fix walking sizes and directions for *-walk benchmarks
authorSiddhesh Poyarekar <siddhesh@sourceware.org>
Mon, 20 Nov 2017 12:25:59 +0000 (17:55 +0530)
committerSiddhesh Poyarekar <siddhesh@sourceware.org>
Mon, 20 Nov 2017 12:33:32 +0000 (18:03 +0530)
Make the walking benchmarks walk only backwards since copying both
ways is biased in favour of implementations that use non-temporal
stores for larger sizes; falkor is one of them.  This also fixes up
bugs in computation of the result which ended up multiplying the
length with the timing result unnecessarily.

* benchtests/bench-memcpy-walk.c (do_one_test): Copy only
backwards.  Fix timing computation.
* benchtests/bench-memmove-walk.c (do_one_test): Likewise.
* benchtests/bench-memset-walk.c (do_one_test): Walk backwards
on memset by N at a time.  Fix timing computation.

ChangeLog
benchtests/bench-memcpy-walk.c
benchtests/bench-memmove-walk.c
benchtests/bench-memset-walk.c

index 225596d10f9e3122ff6ec19244a44683db929f4a..746222d4231291e8a50e7e207abf4428b721bd36 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2017-11-20  Siddhesh Poyarekar  <siddhesh@sourceware.org>
+
+       * benchtests/bench-memcpy-walk.c (do_one_test): Copy only
+       backwards.  Fix timing computation.
+       * benchtests/bench-memmove-walk.c (do_one_test): Likewise.
+       * benchtests/bench-memset-walk.c (do_one_test): Walk backwards
+       on memset by N at a time.  Fix timing computation.
+
 2017-11-20  Florian Weimer  <fweimer@redhat.com>
 
        * manual/llio.texi (Memory-mapped I/O): Document MAP_HUGETLB,
index 69d467d3feebfd8f4b8baa7e092599139432f08a..5b563411adcb401eef1027a760a2d7cf59451233 100644 (file)
@@ -47,26 +47,22 @@ static void
 do_one_test (json_ctx_t *json_ctx, impl_t *impl, char *dst, char *src,
             size_t len)
 {
-  size_t i, iters = MIN_PAGE_SIZE / len;
+  size_t i = 0;
   timing_t start, stop, cur;
 
   char *dst_end = dst + MIN_PAGE_SIZE - len;
   char *src_end = src + MIN_PAGE_SIZE - len;
 
   TIMING_NOW (start);
-  /* Copy the entire buffer back and forth, LEN at a time.  */
-  for (i = 0; i < iters && dst_end >= dst && src <= src_end; src++, dst_end--)
-    {
-      CALL (impl, dst_end, src, len);
-      CALL (impl, src, dst_end, len);
-      i += 2;
-    }
+  /* Copy the entire buffer backwards, LEN at a time.  */
+  for (; src_end >= src && dst_end >= dst; src_end -= len, dst_end -= len, i++)
+    CALL (impl, src_end, dst_end, len);
   TIMING_NOW (stop);
 
   TIMING_DIFF (cur, start, stop);
 
   /* Get time taken per function call.  */
-  json_element_double (json_ctx, (double) cur * len / i);
+  json_element_double (json_ctx, (double) cur / i);
 }
 
 static void
index 54dcd64292bdaf4c20aab2889288315e04a573ff..969ddd94a2748242d50170ce1fcacfa4ca1bae7f 100644 (file)
@@ -47,26 +47,22 @@ static void
 do_one_test (json_ctx_t *json_ctx, impl_t *impl, char *dst, char *src,
             size_t len)
 {
-  size_t i, iters = MIN_PAGE_SIZE / len;
+  size_t i = 0;
   timing_t start, stop, cur;
 
   char *dst_end = dst + MIN_PAGE_SIZE - len;
   char *src_end = src + MIN_PAGE_SIZE - len;
 
   TIMING_NOW (start);
-  /* Copy the entire buffer back and forth, LEN at a time.  */
-  for (i = 0; i < iters && dst_end >= dst && src <= src_end; src++, dst_end--)
-    {
-      CALL (impl, dst_end, src, len);
-      CALL (impl, src, dst_end, len);
-      i += 2;
-    }
+  /* Copy the entire buffer backwards, LEN at a time.  */
+  for (; src_end >= src && dst <= dst_end; dst += len, src_end -= len, i++)
+    CALL (impl, dst, src_end, len);
   TIMING_NOW (stop);
 
   TIMING_DIFF (cur, start, stop);
 
   /* Get time taken per function call.  */
-  json_element_double (json_ctx, (double) cur * len / i);
+  json_element_double (json_ctx, (double) cur / i);
 }
 
 static void
@@ -79,7 +75,6 @@ do_test (json_ctx_t *json_ctx, size_t len, bool overlap)
   if (overlap)
     buf2 = buf1;
 
-  /* First the non-overlapping moves.  */
   FOR_EACH_IMPL (impl, 0)
     do_one_test (json_ctx, impl, (char *) buf2, (char *) buf1, len);
 
index 59d2626f465925a8a79b6702be292a03ab2448c5..80fbe092b882f9a76103466111bb5d577663e82c 100644 (file)
@@ -66,14 +66,14 @@ do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s, CHAR *s_end,
   timing_t start, stop, cur;
 
   TIMING_NOW (start);
-  for (i = 0; i < iters && s <= s_end; s++, i++)
+  for (i = 0; i < iters && s <= s_end; s_end -= n, i++)
     CALL (impl, s, c, n);
   TIMING_NOW (stop);
 
   TIMING_DIFF (cur, start, stop);
 
   /* Get time taken per function call.  */
-  json_element_double (json_ctx, (double) cur * n / i);
+  json_element_double (json_ctx, (double) cur / i);
 }
 
 static void