Restructure of repetition tester

This commit is contained in:
Abdelrahman Said 2023-09-23 23:06:38 +01:00
parent b7d33de2d7
commit dca94a0edf
3 changed files with 35 additions and 24 deletions

View File

@ -15,6 +15,13 @@ struct reptest_results {
u64 read_time;
};
struct time_stats {
u64 min_time;
u64 max_time;
u64 avg_time;
u64 total_time;
};
struct reptester {
reptest_params params;
@ -25,10 +32,7 @@ struct reptester {
u64 test_start_time;
u64 current_run;
u64 min;
u64 max;
u64 avg;
u64 total;
time_stats tstats;
reptest_results results;
};

View File

@ -40,10 +40,12 @@ int main(int argc, char *argv[]) {
read_cpu_timer(), // test_start_time
1, // current_run
UINT64_MAX, // min
0, // max
0, // avg
0, // total
{
UINT64_MAX, // min
0, // max
0, // avg
0, // total
},
{}, // results
};
// clang-format on

View File

@ -37,10 +37,12 @@ void run_func_test(reptester *tester, reptest_func func, const char *func_name,
tester->test_start_time = read_cpu_timer();
tester->test_time_secs = 0.0;
tester->current_run = 1;
tester->min = UINT64_MAX;
tester->max = 0;
tester->avg = 0;
tester->total = 0;
tester->tstats = {
UINT64_MAX, // min_time
0, // max_time
0, // avg_time
0, // total_time
};
tester->results = {};
char *buffer = NULL;
@ -63,13 +65,13 @@ void run_func_test(reptester *tester, reptest_func func, const char *func_name,
return;
}
tester->total += tester->results.read_time;
tester->tstats.total_time += tester->results.read_time;
if (tester->results.read_time > tester->max) {
tester->max = tester->results.read_time;
} else if (tester->results.read_time < tester->min) {
if (tester->results.read_time > tester->tstats.max_time) {
tester->tstats.max_time = tester->results.read_time;
} else if (tester->results.read_time < tester->tstats.min_time) {
tester->test_start_time = read_cpu_timer();
tester->min = tester->results.read_time;
tester->tstats.min_time = tester->results.read_time;
}
tester->test_time_secs = time_in_seconds(
@ -94,13 +96,16 @@ void print_results(reptester *tester, const char *name) {
u64 run_count = tester->current_run - 1;
tester->avg = tester->total / run_count;
tester->tstats.avg_time = tester->tstats.total_time / run_count;
printf("\n%s: %lu runs\n", name, run_count);
printf("MIN: %lu (%fGB/s)\n", tester->min,
size_in_gb / time_in_seconds(tester->min, tester->cpu_freq));
printf("MAX: %lu (%fGB/s)\n", tester->max,
size_in_gb / time_in_seconds(tester->max, tester->cpu_freq));
printf("AVG: %lu (%fGB/s)\n", tester->avg,
size_in_gb / time_in_seconds(tester->avg, tester->cpu_freq));
printf("MIN: %lu (%fGB/s)\n", tester->tstats.min_time,
size_in_gb /
time_in_seconds(tester->tstats.min_time, tester->cpu_freq));
printf("MAX: %lu (%fGB/s)\n", tester->tstats.max_time,
size_in_gb /
time_in_seconds(tester->tstats.max_time, tester->cpu_freq));
printf("AVG: %lu (%fGB/s)\n", tester->tstats.avg_time,
size_in_gb /
time_in_seconds(tester->tstats.avg_time, tester->cpu_freq));
}