From: Siddhesh Poyarekar <siddhesh@gotplt.org>
To: libc-alpha@sourceware.org
Subject: Re: [PATCH 1/3] benchtests: Fix walking sizes and directions for *-walk benchmarks
Date: Mon, 20 Nov 2017 12:34:00 -0000 [thread overview]
Message-ID: <75fb31d9-5bdc-bc2d-679f-0be3dd658d65@gotplt.org> (raw)
In-Reply-To: <1510204408-1739-2-git-send-email-siddhesh@sourceware.org>
... and now pushed.
Siddhesh
On Thursday 09 November 2017 10:43 AM, Siddhesh Poyarekar wrote:
> 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.
> ---
> benchtests/bench-memcpy-walk.c | 14 +++++---------
> benchtests/bench-memmove-walk.c | 15 +++++----------
> benchtests/bench-memset-walk.c | 4 ++--
> 3 files changed, 12 insertions(+), 21 deletions(-)
>
> diff --git a/benchtests/bench-memcpy-walk.c b/benchtests/bench-memcpy-walk.c
> index 69d467d..5b56341 100644
> --- a/benchtests/bench-memcpy-walk.c
> +++ b/benchtests/bench-memcpy-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_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
> diff --git a/benchtests/bench-memmove-walk.c b/benchtests/bench-memmove-walk.c
> index 54dcd64..969ddd9 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);
>
> diff --git a/benchtests/bench-memset-walk.c b/benchtests/bench-memset-walk.c
> index 59d2626..80fbe09 100644
> --- a/benchtests/bench-memset-walk.c
> +++ b/benchtests/bench-memset-walk.c
> @@ -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
>
prev parent reply other threads:[~2017-11-20 12:34 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-09 5:13 [PATCH 0/3] memset zva optimization Siddhesh Poyarekar
2017-11-09 5:14 ` [PATCH 2/3] benchtests: Bump start size since smaller sizes are noisy Siddhesh Poyarekar
2017-11-14 9:19 ` Siddhesh Poyarekar
2017-11-20 12:34 ` Siddhesh Poyarekar
2017-11-09 5:14 ` [PATCH 3/3] aarch64: Hoist ZVA check out of the memset function Siddhesh Poyarekar
2017-11-09 5:33 ` Andrew Pinski
2017-11-09 5:45 ` Siddhesh Poyarekar
2017-11-09 5:46 ` Andrew Pinski
2017-11-09 5:59 ` Siddhesh Poyarekar
2017-11-09 5:14 ` [PATCH 1/3] benchtests: Fix walking sizes and directions for *-walk benchmarks Siddhesh Poyarekar
2017-11-14 9:18 ` Siddhesh Poyarekar
2017-11-20 12:34 ` Siddhesh Poyarekar [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=75fb31d9-5bdc-bc2d-679f-0be3dd658d65@gotplt.org \
--to=siddhesh@gotplt.org \
--cc=libc-alpha@sourceware.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).