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; u64 read_time;
}; };
struct time_stats {
u64 min_time;
u64 max_time;
u64 avg_time;
u64 total_time;
};
struct reptester { struct reptester {
reptest_params params; reptest_params params;
@ -25,10 +32,7 @@ struct reptester {
u64 test_start_time; u64 test_start_time;
u64 current_run; u64 current_run;
u64 min; time_stats tstats;
u64 max;
u64 avg;
u64 total;
reptest_results results; reptest_results results;
}; };

View File

@ -40,10 +40,12 @@ int main(int argc, char *argv[]) {
read_cpu_timer(), // test_start_time read_cpu_timer(), // test_start_time
1, // current_run 1, // current_run
{
UINT64_MAX, // min UINT64_MAX, // min
0, // max 0, // max
0, // avg 0, // avg
0, // total 0, // total
},
{}, // results {}, // results
}; };
// clang-format on // 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_start_time = read_cpu_timer();
tester->test_time_secs = 0.0; tester->test_time_secs = 0.0;
tester->current_run = 1; tester->current_run = 1;
tester->min = UINT64_MAX; tester->tstats = {
tester->max = 0; UINT64_MAX, // min_time
tester->avg = 0; 0, // max_time
tester->total = 0; 0, // avg_time
0, // total_time
};
tester->results = {}; tester->results = {};
char *buffer = NULL; char *buffer = NULL;
@ -63,13 +65,13 @@ void run_func_test(reptester *tester, reptest_func func, const char *func_name,
return; return;
} }
tester->total += tester->results.read_time; tester->tstats.total_time += tester->results.read_time;
if (tester->results.read_time > tester->max) { if (tester->results.read_time > tester->tstats.max_time) {
tester->max = tester->results.read_time; tester->tstats.max_time = tester->results.read_time;
} else if (tester->results.read_time < tester->min) { } else if (tester->results.read_time < tester->tstats.min_time) {
tester->test_start_time = read_cpu_timer(); 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( 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; 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("\n%s: %lu runs\n", name, run_count);
printf("MIN: %lu (%fGB/s)\n", tester->min, printf("MIN: %lu (%fGB/s)\n", tester->tstats.min_time,
size_in_gb / time_in_seconds(tester->min, tester->cpu_freq)); size_in_gb /
printf("MAX: %lu (%fGB/s)\n", tester->max, time_in_seconds(tester->tstats.min_time, tester->cpu_freq));
size_in_gb / time_in_seconds(tester->max, tester->cpu_freq)); printf("MAX: %lu (%fGB/s)\n", tester->tstats.max_time,
printf("AVG: %lu (%fGB/s)\n", tester->avg, size_in_gb /
size_in_gb / time_in_seconds(tester->avg, tester->cpu_freq)); 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));
} }