diff options
| author | suyambulingamrm <suyambu.rm@samsung.com> | 2014-05-21 09:54:57 +0530 |
|---|---|---|
| committer | Bryce Harrington <b.harrington@samsung.com> | 2014-05-21 18:50:14 -0700 |
| commit | c0a4ec686bc9f25e32f7644f1209032b3f7614af (patch) | |
| tree | 2619eea1b63067c3ecce64173937632f23084e97 /src/caskbench.cpp | |
| parent | ee4ef5e18c4a066e6150b0b4dd6908a4208470a6 (diff) | |
Add max runtime, median run time and standard deviation in json output.
ref: https://github.com/SRA-SiliconValley/caskbench/issues/35
Diffstat (limited to 'src/caskbench.cpp')
| -rw-r--r-- | src/caskbench.cpp | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/src/caskbench.cpp b/src/caskbench.cpp index 3d039d4..9cb0dc6 100644 --- a/src/caskbench.cpp +++ b/src/caskbench.cpp @@ -76,6 +76,9 @@ typedef struct _caskbench_result { int iterations; double min_run_time; double avg_run_time; + double max_run_time; + double median_run_time; + double standard_deviation; int status; } caskbench_result_t; @@ -548,6 +551,38 @@ result_init(caskbench_result_t *result, const char* name) result->size = 0; result->min_run_time = -1.0; result->avg_run_time = -1.0; + result->max_run_time = -1.0; + result->median_run_time = -1.0; + result->standard_deviation = -1.0; +} + +double median_run_time (double data[], int n) +{ + double temp; + int i, j; + for (i = 0; i < n; i++) + for (j = i+1; j < n; j++) + { + if (data[i] > data[j]) + { + temp = data[j]; + data[j] = data[i]; + data[i] = temp; + } + } + if (n % 2 == 0) + return (data[n/2] + data[n/2-1])/2; + else + return data[n/2]; +} + +double standard_deviation (const double data[], int n, double mean) +{ + double sum_deviation = 0.0; + int i; + for (i = 0; i < n; ++i) + sum_deviation += (data[i]-mean) * (data[i]-mean); + return sqrt (sum_deviation / n); } int @@ -563,6 +598,7 @@ main (int argc, char *argv[]) device_config_t config; process_options(&opt, argc, argv); + double run_time_values[opt.iterations]; memset (&config, 0, sizeof(device_config_t)); @@ -637,10 +673,12 @@ main (int argc, char *argv[]) stop_time = get_tick(); run_time = stop_time - start_time; + run_time_values[opt.iterations-i] = run_time; if (result.min_run_time < 0) result.min_run_time = run_time; else result.min_run_time = MIN(run_time, result.min_run_time); + result.max_run_time = MAX(run_time, result.max_run_time); run_total += run_time; } catch (...) { warnx("Unknown exception encountered\n"); @@ -651,6 +689,8 @@ main (int argc, char *argv[]) result.iterations = opt.iterations - i; result.avg_run_time = run_total / (double)result.iterations; result.size = opt.size; + result.median_run_time = median_run_time (run_time_values, result.iterations); + result.standard_deviation = standard_deviation (run_time_values, result.iterations, result.avg_run_time); // Write image to file if (perf_tests[c].write_image) { @@ -685,6 +725,9 @@ main (int argc, char *argv[]) fprintf(fp, " \"iterations\": %d,\n", result.iterations); fprintf(fp, " \"minimum run time (s)\": %f,\n", result.min_run_time); fprintf(fp, " \"average run time (s)\": %f\n", result.avg_run_time); + fprintf(fp, " \"maximum run time (s)\": %f\n", result.max_run_time); + fprintf(fp, " \"median run time (s)\": %f\n", result.median_run_time); + fprintf(fp, " \"standard deviation of run time (s)\": %f\n", result.standard_deviation); fprintf(fp, " }"); if (c != num_perf_tests-1) |