public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
From: "Lucas A. M. Magalhaes" <lamm@linux.ibm.com>
To: libc-alpha@sourceware.org, naohirot@fujitsu.com
Cc: "'Wilco Dijkstra'" <Wilco.Dijkstra@arm.com>,
	Noah Goldstein <goldstein.w.n@gmail.com>
Subject: Re: [PATCH v3 2/5] benchtests: Add memset zero fill benchtest
Date: Mon, 18 Oct 2021 09:57:12 -0300	[thread overview]
Message-ID: <163456183281.2142698.11944761470468149892@localhost.localdomain> (raw)
In-Reply-To: <TYAPR01MB602550ECE3E7DE7BC188AEEEDFA89@TYAPR01MB6025.jpnprd01.prod.outlook.com>

> > > What do you think?
> >
> > As I've mentioned, this will never work using the current benchmark loop.
> > At size 256 your loop has only 1 timer tick... The only way to get any data
> > out is to increase the time taken per call. At 16K there are about 20 ticks so
> > it is still very inaccurate. By repeating the test thousands of times you can
> > some signal out (eg. 20% is 20 ticks, 80% is 21 gives ~20.8 ticks on average),
> > but that's impossible for smaller sizes.
> >
> > So if you want to measure small sizes, you need to use a more accurate timing
> > loop.
> 
> Thank you for the comment.
> OK, I understood. So I updated the start size to 16KB too to commit first.
> Please find V5 [1] and merge it if it's OK.
> Changes from V4:
> - Start size to 16KB from 256B
> - End size to 16MB from 64MB
 
> [1] https://sourceware.org/pipermail/libc-alpha/2021-September/131245.html
 
Hi Tamura,

I agree with you that is important to measure calls with smaller
lengths.  IMHO the issue here is not if the benchmark should measure or
not this lengths, but how it could measure that.

+static void
+__attribute__((noinline, noclone))
+do_one_test (json_ctx_t *json_ctx, impl_t *impl, CHAR *s,
+	     int c1 __attribute ((unused)), int c2 __attribute ((unused)),
+	     size_t n)
+{
+  size_t i, iters = 32;
+  timing_t start, stop, cur, latency = 0;
+
+  CALL (impl, s, c2, n); // warm up
+
+  for (i = 0; i < iters; i++)
+    {
+      memset (s, c1, n); // alternation
+
+      TIMING_NOW (start);
+
+      CALL (impl, s, c2, n);
+
+      TIMING_NOW (stop);
+      TIMING_DIFF (cur, start, stop);
+      TIMING_ACCUM (latency, cur);
+    }
+
+  json_element_double (json_ctx, (double) latency / (double) iters);
+}

By doing this you are measuring just the call it self and accumulating
the results. This is indeed not measurable for really small lengths.
You could try moving the memset and the timing out of the loop and
measure the time spent in multiple runs. To fix the memset you could
memset a bigger buffer and move the s pointer on each loop. I guess this
will reduce the variations Wilco mentioned.
Maybe we need to keep this loop for bigger lengths as we will need
a buffer too much big for the implementation that I suggested.

Another point here is that GNU Code Style asks for /**/ comments
instead of //. As seen in
http://www.gnu.org/prep/standards/standards.html#Comments

Finally, Sorry that I took so long to reply here.
Thanks for working on this.
---
Lucas A. M. Magalhães

  parent reply	other threads:[~2021-10-18 12:57 UTC|newest]

Thread overview: 83+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-07-13  8:22 [PATCH] benchtests: Add memset zero fill benchmark tests Naohiro Tamura
2021-07-13 13:50 ` Lucas A. M. Magalhaes
2021-07-20  6:31 ` [PATCH v2 0/5] " Naohiro Tamura
2021-08-05  7:47   ` [PATCH v3 0/5] benchtests: Add memset zero fill benchmark test Naohiro Tamura
2021-08-05  7:49     ` [PATCH v3 1/5] benchtests: Enable scripts/plot_strings.py to read stdin Naohiro Tamura
2021-08-05  7:56       ` Siddhesh Poyarekar
2021-09-08  1:46         ` naohirot
2021-09-08 12:56           ` Siddhesh Poyarekar
2021-09-09  0:22             ` naohirot
2021-09-13  3:45               ` Siddhesh Poyarekar
2021-08-05  7:50     ` [PATCH v3 2/5] benchtests: Add memset zero fill benchtest Naohiro Tamura
2021-09-08  2:03       ` naohirot
2021-09-10 20:40       ` Lucas A. M. Magalhaes
2021-09-13  0:53         ` naohirot
2021-09-13 14:05           ` Lucas A. M. Magalhaes
2021-09-14  0:38             ` [PATCH v4] " Naohiro Tamura
2021-09-14  0:44             ` [PATCH v3 2/5] " naohirot
2021-09-14 14:02               ` Wilco Dijkstra
2021-09-15  8:24                 ` naohirot
2021-09-21  1:27                   ` naohirot
2021-09-21 11:09                     ` Wilco Dijkstra
2021-09-22  1:05                       ` [PATCH v5] " Naohiro Tamura
2023-02-09 17:23                         ` Carlos O'Donell
2023-02-10  1:26                           ` Siddhesh Poyarekar
2021-09-22  1:07                       ` [PATCH v3 2/5] " naohirot
2021-09-28  1:40                         ` naohirot
2021-09-30  0:55                           ` Tamura, Naohiro/田村 直�
2021-10-18 12:57                           ` Lucas A. M. Magalhaes [this message]
2021-10-20 13:44                             ` Wilco Dijkstra
2021-10-20 15:35                               ` Lucas A. M. Magalhaes
2021-10-20 17:47                                 ` Wilco Dijkstra
2021-10-22 13:08                                   ` Lucas A. M. Magalhaes
2021-08-05  7:51     ` [PATCH v3 3/5] benchtests: Remove redundant assert.h Naohiro Tamura
2021-09-08  1:59       ` naohirot
2021-09-13  3:36       ` Siddhesh Poyarekar
2021-08-05  7:51     ` [PATCH v3 4/5] benchtests: Fix validate_benchout.py exceptions Naohiro Tamura
2021-09-08  1:55       ` naohirot
2021-09-13  3:42       ` Siddhesh Poyarekar
2021-09-13  3:50         ` Siddhesh Poyarekar
2021-09-13 13:44           ` [PATCH v4] " Naohiro Tamura
2021-09-15  3:23             ` Siddhesh Poyarekar
2021-09-16  1:12               ` naohirot
2021-09-16  1:41                 ` Siddhesh Poyarekar
2021-09-16  2:23                   ` [PATCH v5] " Naohiro Tamura
2021-09-16  3:48                     ` Siddhesh Poyarekar
2021-09-16  5:23                       ` naohirot
2021-09-16  2:26                   ` [PATCH v4] " naohirot
2021-09-13 13:46           ` [PATCH v3 4/5] " naohirot
2021-08-05  7:52     ` [PATCH v3 5/5] config: Rename HAVE_BUILTIN_MEMSET macro Naohiro Tamura
2021-08-11 20:34       ` Adhemerval Zanella
2021-07-20  6:34 ` [PATCH v2 1/5] benchtests: Enable scripts/plot_strings.py to read stdin Naohiro Tamura
2021-07-20  6:35 ` [PATCH v2 2/5] benchtests: Add memset zero fill benchtest Naohiro Tamura
2021-07-20 16:48   ` Noah Goldstein
2021-07-21 12:56     ` naohirot
2021-07-21 13:07       ` naohirot
2021-07-21 18:14         ` Noah Goldstein
2021-07-21 19:17           ` Wilco Dijkstra
2021-07-26  8:42             ` naohirot
2021-07-26 11:15               ` Wilco Dijkstra
2021-07-27  2:24                 ` naohirot
2021-07-27 17:26                   ` Wilco Dijkstra
2021-07-28  7:27                     ` naohirot
2021-08-04  9:11                       ` naohirot
2021-07-26  8:39     ` naohirot
2021-07-26 17:22       ` Noah Goldstein
2021-07-20  6:35 ` [PATCH v2 3/5] benchtests: Add a script to convert benchout string JSON to CSV Naohiro Tamura
2021-07-21  2:41   ` naohirot
2021-07-27 20:17   ` Joseph Myers
2021-07-29  1:56     ` naohirot
2021-07-29  4:42       ` Siddhesh Poyarekar
2021-07-30  7:05         ` naohirot
2021-07-31 10:47           ` Siddhesh Poyarekar
2021-07-20  6:36 ` [PATCH v2 4/5] benchtests: Remove redundant assert.h Naohiro Tamura
2021-07-20  6:37 ` [PATCH v2 5/5] benchtests: Fix validate_benchout.py exceptions Naohiro Tamura
2021-07-26  8:34 ` [PATCH] config: Remove HAVE_BUILTIN_MEMSET macro Naohiro Tamura
2021-07-26  8:48   ` naohirot
2021-07-26  8:49   ` Andreas Schwab
2021-07-26  9:42     ` naohirot
2021-07-26  9:51       ` Andreas Schwab
2021-07-26 13:16         ` naohirot
2021-07-26  8:35 ` [PATCH] benchtests: Add a script to merge two benchout string files Naohiro Tamura
2021-07-27 20:51   ` Joseph Myers
2021-07-30  7:04     ` naohirot

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=163456183281.2142698.11944761470468149892@localhost.localdomain \
    --to=lamm@linux.ibm.com \
    --cc=Wilco.Dijkstra@arm.com \
    --cc=goldstein.w.n@gmail.com \
    --cc=libc-alpha@sourceware.org \
    --cc=naohirot@fujitsu.com \
    /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).