diff options
author | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-11-20 17:55:59 +0530 |
---|---|---|
committer | Siddhesh Poyarekar <siddhesh@sourceware.org> | 2017-11-20 18:03:32 +0530 |
commit | 4d7632ff687dc60fb9ed38bae682d395017b61a8 (patch) | |
tree | 3ee504482bd103ea4adb3cf2368451b133c9266a /benchtests/bench-memmove-walk.c | |
parent | a465b89ee82642c193cfd7deb6eb5d999ffaa5b7 (diff) | |
download | glibc-4d7632ff687dc60fb9ed38bae682d395017b61a8.tar.gz glibc-4d7632ff687dc60fb9ed38bae682d395017b61a8.tar.xz glibc-4d7632ff687dc60fb9ed38bae682d395017b61a8.zip |
benchtests: Fix walking sizes and directions for *-walk benchmarks
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.
Diffstat (limited to 'benchtests/bench-memmove-walk.c')
-rw-r--r-- | benchtests/bench-memmove-walk.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/benchtests/bench-memmove-walk.c b/benchtests/bench-memmove-walk.c index 54dcd64292..969ddd94a2 100644 --- a/benchtests/bench-memmove-walk.c +++ b/benchtests/bench-memmove-walk.c @@ -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); |