~rsandifo/+junk/loop-microbenchmarks

« back to all changes in this revision

Viewing changes to src/main.c

  • Committer: Richard Sandiford
  • Date: 2011-09-13 14:01:57 UTC
  • Revision ID: richard.sandiford@linaro.org-20110913140157-4s8l32qg7udubtlj
Print mean and standard deviation (from Ramana).

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
    peak_loop ();
36
36
}
37
37
 
 
38
static void
 
39
display_results (double *times)
 
40
{
 
41
  double quickest, mean, sum, sum_of_squared_differences, std_dev;
 
42
  int i;
 
43
 
 
44
  quickest = times[0];
 
45
  for (i = 1 ; i < REPEATS; i++)
 
46
    if (quickest > times[i])
 
47
      quickest = times[i];
 
48
 
 
49
  sum = 0.0;
 
50
  for (i = 0 ; i < REPEATS; i++)
 
51
    sum += times[i];
 
52
  mean = sum / REPEATS;  
 
53
 
 
54
  sum_of_squared_differences = 0.0;
 
55
  for (i = 0; i < REPEATS ; i++)
 
56
    sum_of_squared_differences += (times[i] - mean) * (times[i] - mean);
 
57
  std_dev = sqrt (sum_of_squared_differences / REPEATS);
 
58
 
 
59
  printf ("%d runs take %gms, mean = %gms, std dev = %gms\n",
 
60
          ITERATIONS, quickest * 1000.0, mean * 1000.0, std_dev * 1000.0);
 
61
}
 
62
 
38
63
int
39
64
main (void)
40
65
{
41
66
  int i;
42
67
  struct timespec before, after;
43
 
  double time, min_time;
 
68
  double times[REPEATS];
44
69
  const char *bad_var;
45
70
 
46
71
  initialise ();
53
78
      return 1;
54
79
    }
55
80
 
56
 
  min_time = 0.0;
57
81
  for (i = 0; i < REPEATS; i++)
58
82
    {
59
83
      initialise ();
63
87
      preload ();
64
88
      one_iteration (ITERATIONS);
65
89
      clock_gettime (TIMER, &after);
66
 
      time = ((after.tv_sec - before.tv_sec) * 1.0
67
 
              + (after.tv_nsec - before.tv_nsec) * 1.0e-9);
68
 
      if (i == 0 || min_time > time)
69
 
        min_time = time;
 
90
      times[i] = ((after.tv_sec - before.tv_sec) * 1.0
 
91
                  + (after.tv_nsec - before.tv_nsec) * 1.0e-9);
70
92
    }
71
 
  printf ("%d runs take %gms\n", ITERATIONS, min_time * 1000.0f);
 
93
  display_results (times);
72
94
  return 0;
73
95
}