| #!/bin/bash |
| # |
| # Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file |
| # for details. All rights reserved. Use of this source code is governed by a |
| # BSD-style license that can be found in the LICENSE file. |
| |
| # This file is repsonsible for performing the averag and standard deviation |
| # for a specific metrics over a given set of metrics in a file. |
| # This should be included in other compiler scripts, or used through |
| # sample_metrics.sh |
| |
| AVERAGE=0 |
| STDEV=0 |
| COUNT=0 |
| |
| function do_math_return() { |
| local sum=0 |
| local count=0 |
| local time |
| for time in $2 |
| do |
| sum=$(echo "$sum + $time" | bc -l) |
| (( count++ )) |
| done |
| average=$(echo "$sum / $count" | bc -l) |
| #echo "count=$count, sum=$sum, average=$average" |
| |
| #go over the numbers, take the difference from the average and squart, then square root / count. |
| sum_dev=0 |
| for time in $2 |
| do |
| step=$(echo "$time - $average" | bc -l) |
| sum_dev=$(echo "$sum_dev + $step^2" | bc -l) |
| done |
| |
| step=$(echo "$sum_dev / $count" | bc -l) |
| OUT="sqrt(${step})" |
| standard_dev=$(echo $OUT | bc -l | sed 's/\([0-9]*\.[0-9][0-9]\)[0-9]*/\1/') |
| average=$(echo $average | sed 's/\([0-9]*\.[0-9][0-9]\)[0-9]*/\1/') |
| AVERAGE=$average |
| STDEV=$standard_dev |
| COUNT=$count |
| } |
| |
| function do_math() { |
| do_math_return "$1" "$2" |
| echo "$1: average: $AVERAGE stdev: $STDEV count: $COUNT" |
| } |
| |
| function sample_file_return() { |
| TIMES=$(sed -n "s/$2\S*\s*:\s*\(\([0-9]*\)\(\.[0-9]*\)\?\)/\1/p" $3) |
| do_math_return "$1" "$TIMES" |
| SAMPLE_LINE="$1: average: $AVERAGE stdev: $STDEV count: $COUNT" |
| } |
| |
| function sample_file() { |
| TIMES=$(sed -n "s/$2\S*\s*:\s*\(\([0-9]*\)\(\.[0-9]*\)\?\)/\1/p" $3) |
| do_math "$1" "$TIMES" |
| } |