public inbox for libstdc++@gcc.gnu.org
 help / color / mirror / Atom feed
From: Jonathan Wakely <jwakely@redhat.com>
To: Alexandre Oliva <oliva@adacore.com>
Cc: libstdc++@gcc.gnu.org, gcc-patches@gcc.gnu.org
Subject: Re: calibrate intervals to avoid zero in futures poll test
Date: Thu, 14 Jan 2021 12:54:08 +0000	[thread overview]
Message-ID: <20210114125408.GA7692@redhat.com> (raw)
In-Reply-To: <ork0sr7rqq.fsf@lxoliva.fsfla.org>

On 05/01/21 04:44 -0300, Alexandre Oliva wrote:
>
>We get occasional failures of 30_threads/future/members/poll.cc
>on some platforms whose high resolution clock doesn't have such a high
>resolution; wait_for_0 ends up as 0, and then some asserts fail as
>intervals measured as longer than zero are tested for less than
>several times zero.
>
>This patch adds some calibration in the iteration count to set a
>measurable base time interval with some additional margin.
>
>Regstrapped on x86_64-linux-gnu, and also tested on
>x-arm-wrs-vxworks7r2.  Ok to install?
>
>
>for  libstdc++-v3/ChangeLog
>
>	* testsuite/30_threads/future/members/poll.cc: Calibrate
>	iteration count.
>---
> .../testsuite/30_threads/future/members/poll.cc    |   33 +++++++++++++++++++-
> 1 file changed, 32 insertions(+), 1 deletion(-)
>
>diff --git a/libstdc++-v3/testsuite/30_threads/future/members/poll.cc b/libstdc++-v3/testsuite/30_threads/future/members/poll.cc
>index fff9bea899c90..7b41411a54386 100644
>--- a/libstdc++-v3/testsuite/30_threads/future/members/poll.cc
>+++ b/libstdc++-v3/testsuite/30_threads/future/members/poll.cc
>@@ -25,7 +25,7 @@
> #include <iostream>
> #include <testsuite_hooks.h>
>
>-const int iterations = 200;
>+int iterations = 200;
>
> using namespace std;
>
>@@ -45,10 +45,41 @@ int main()
>   promise<int> p;
>   future<int> f = p.get_future();
>
>+ start_over:
>   auto start = chrono::high_resolution_clock::now();
>   for(int i = 0; i < iterations; i++)
>     f.wait_for(chrono::seconds(0));
>   auto stop = chrono::high_resolution_clock::now();
>+
>+  /* We've run too few iterations for the clock resolution.
>+     Attempt to calibrate it.  */
>+  if (start == stop)
>+    {
>+      /* Loop until the clock advances, so that start is right after a
>+	 time increment.  */
>+      do
>+	start = chrono::high_resolution_clock::now();
>+      while (start == stop);
>+      int i = 0;
>+      /* Now until the clock advances again, so that stop is right
>+	 after another time increment.  */
>+      do
>+	{
>+	  f.wait_for(chrono::seconds(0));
>+	  stop = chrono::high_resolution_clock::now();
>+	  i++;
>+	}
>+      while (start == stop);
>+      /* Got for some 10 cycles, but we're already past that and still

I can't parse "Got for some 10 cycles". If that's just a typo that I'm
failing to spot ("good for"?) please fix and push the patch.

The patch is fine apart from me being unable to understand this
comment.

>+	 get into the calibration loop, double the iteration count and
>+	 try again.  */
>+      if (iterations < i * 10)
>+	iterations = i * 10;
>+      else
>+	iterations *= 2;
>+      goto start_over;
>+    }
>+
>   double wait_for_0 = print("wait_for(0s)", stop - start);
>
>   start = chrono::high_resolution_clock::now();
>
>
>-- 
>Alexandre Oliva, happy hacker  https://FSFLA.org/blogs/lxo/
>   Free Software Activist         GNU Toolchain Engineer
>        Vim, Vi, Voltei pro Emacs -- GNUlius Caesar
>


  parent reply	other threads:[~2021-01-14 12:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-01-05  7:44 Alexandre Oliva
2021-01-13 17:00 ` Alexandre Oliva
2021-01-14 12:54 ` Jonathan Wakely [this message]
2021-01-14 18:57   ` Alexandre Oliva
2021-02-08  9:59     ` Christophe Lyon

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=20210114125408.GA7692@redhat.com \
    --to=jwakely@redhat.com \
    --cc=gcc-patches@gcc.gnu.org \
    --cc=libstdc++@gcc.gnu.org \
    --cc=oliva@adacore.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).