static int fd[MAX_NR_CPUS][MAX_COUNTERS];
static u64 event_res[MAX_COUNTERS][3];
-static u64 event_scaled[MAX_COUNTERS];
+static int event_scaled[MAX_COUNTERS];
struct stats
{
}
/*
- * stddev = sqrt(1/N (\Sum n_i^2) - avg(n)^2)
+ * http://en.wikipedia.org/wiki/Algorithms_for_calculating_variance
+ *
+ * (\Sum n_i^2) - ((\Sum n_i)^2)/n
+ * s^2 -------------------------------
+ * n - 1
+ *
+ * http://en.wikipedia.org/wiki/Stddev
+ *
+ * The std dev of the mean is related to the std dev by:
+ *
+ * s
+ * s_mean = -------
+ * sqrt(n)
+ *
*/
static double stddev_stats(struct stats *stats)
{
double avg = stats->sum / run_count;
+ double variance = (stats->sum_sq - stats->sum*avg)/(run_count - 1);
+ double variance_mean = variance / run_count;
- return sqrt(stats->sum_sq/run_count - avg*avg);
+ return sqrt(variance_mean);
}
struct stats event_res_stats[MAX_COUNTERS][3];
-struct stats event_scaled_stats[MAX_COUNTERS];
struct stats runtime_nsecs_stats;
struct stats walltime_nsecs_stats;
struct stats runtime_cycles_stats;
static void print_counter(int counter)
{
double avg, stddev;
- int scaled;
+ int scaled = event_scaled[counter];
avg = avg_stats(&event_res_stats[counter][0]);
stddev = stddev_stats(&event_res_stats[counter][0]);
- scaled = avg_stats(&event_scaled_stats[counter]);
if (scaled == -1) {
fprintf(stderr, " %14s %-24s\n",