Some arm cortex-a8 improvements

Richard Henderson rth at twiddle.net
Sat Apr 21 16:36:35 CEST 2012


On 04/20/2012 11:34 AM, Torbjorn Granlund wrote:
>   It's a bit touchy speed testing these.  There's no cycle counter
>   available in userspace, and Hz is depressingly low.  So I've had
>   to bump the minimum iterations way way up in order to get semi-
>   reliable results.  Which causes the speed testing to take quite
>   a long time.
>   
> What did you do to make it work?
> 
> I always get "Fatal error: too many (11) failed measurements (0.0)"
> on any arm system.

I used the following, almost certainly not appropriate for general application.


r~
-------------- next part --------------
diff -upr z/gmp-5.0.3/tune/common.c gmp-5.0.3/tune/common.c
--- z/gmp-5.0.3/tune/common.c	2012-01-27 03:59:30.000000000 -0500
+++ gmp-5.0.3/tune/common.c	2012-02-10 22:09:23.000000000 -0500
@@ -142,7 +142,7 @@ speed_measure (double (*fun) __GMP_PROTO
       s = &s_dummy;
     }
 
-  s->reps = 1;
+  s->reps = 10;
   s->time_divisor = 1.0;
   for (i = 0; i < numberof (t); i++)
     {
@@ -159,13 +159,9 @@ speed_measure (double (*fun) __GMP_PROTO
 
 	  if (t[i] == 0.0)
 	    {
-	      zeros++;
-	      if (zeros > max_zeros)
-		{
-		  fprintf (stderr, "Fatal error: too many (%d) failed measurements (0.0)\n", zeros);
-		  abort ();
-		}
-	      continue;
+	      if (++zeros < max_zeros)
+		continue;
+	      goto increase_reps;
 	    }
 
 	  if (t[i] == -1.0)
@@ -175,7 +171,8 @@ speed_measure (double (*fun) __GMP_PROTO
 	    break;
 
 	  /* go to a value of reps to make t[i] >= precision */
-	  reps_d = ceil (1.1 * s->reps
+	increase_reps:
+	  reps_d = ceil (1.15 * s->reps
 			 * speed_unittime * speed_precision
 			 / MAX (t[i], speed_unittime));
 	  if (reps_d > 2e9 || reps_d < 1.0)


More information about the gmp-devel mailing list