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.
This commit is contained in:
parent
a465b89ee8
commit
4d7632ff68
|
@ -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,
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue