From 67f8bcb195c5e23947616b1e1c5664321f6ea054 Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Fri, 12 Jun 2020 01:38:36 +0000 Subject: Update the timing infrastructure to better handle large sample sizes - Use malloc rather than static allocations - Check that timings array is long enough before inserting each sample - Include clearer error handling --- baseline/source/extra.h | 52 +++++++++++++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 21 deletions(-) (limited to 'baseline') diff --git a/baseline/source/extra.h b/baseline/source/extra.h index 5e527c6..3f6df32 100644 --- a/baseline/source/extra.h +++ b/baseline/source/extra.h @@ -11,6 +11,7 @@ #include #include #include +#include // These constants correspond to the imx6q-sabredb platform #define LINE_SIZE 32 @@ -55,19 +56,20 @@ char *thisCore=argv[3];\ char *runID=argv[4];\ int output=atoi(argv[5]);\ - pid_t killMe;\ - struct timespec start, end;\ + struct timespec _start, _end;\ int jobsComplete;\ int jobs_complete = -1;\ - float progTime[maxJobs*output];\ + float *progTime = malloc(sizeof(float)*maxJobs*output);\ memset(progTime, 0, sizeof(float)*maxJobs*output);\ - char fileName[50];\ - char *bigArray;\ - int wasteCount;\ - float mmdc_read[maxJobs];\ - float mmdc_write[maxJobs];\ - memset(mmdc_read, 0, sizeof(float)*maxJobs);\ - memset(mmdc_write, 0, sizeof(float)*maxJobs);\ + char fileName[64];\ + float *mmdc_read = malloc(sizeof(float)*maxJobs*output);\ + float *mmdc_write = malloc(sizeof(float)*maxJobs*output);\ + memset(mmdc_read, 0, sizeof(float)*maxJobs*output);\ + memset(mmdc_write, 0, sizeof(float)*maxJobs*output);\ + if (strlen(runID) + 5 > sizeof(fileName)) {\ + fprintf(stderr, "Run ID is too large! Keep it to less than 60 characters.\n");\ + exit(1);\ + }\ strcpy(fileName, runID);\ strcat(fileName, ".txt");\ mlockall(MCL_CURRENT || MCL_FUTURE); @@ -160,19 +162,27 @@ #if MMDC_PROF #define SAVE_RESULTS \ - if(jobs_complete>-1) {\ - progTime[jobs_complete] = end.tv_sec - start.tv_sec;\ + if(jobs_complete >= maxJobs) {\ + fprintf(stderr, "Max jobs setting too small! Exiting...\n");\ + exit(1);\ + }\ + if(jobs_complete>-1 && output) {\ + progTime[jobs_complete] = _end.tv_sec - _start.tv_sec;\ progTime[jobs_complete] *= 1000000000;\ - progTime[jobs_complete] += end.tv_nsec - start.tv_nsec;\ + progTime[jobs_complete] += _end.tv_nsec - _start.tv_nsec;\ mmdc_read[jobs_complete] = mmdc_res.read_bytes;\ mmdc_write[jobs_complete] = mmdc_res.write_bytes;\ } #else #define SAVE_RESULTS \ - if(jobs_complete>-1) {\ - progTime[jobs_complete] = end.tv_sec - start.tv_sec;\ + if(jobs_complete >= maxJobs) {\ + fprintf(stderr, "Max jobs setting too small! Exiting...\n");\ + exit(1);\ + }\ + if(jobs_complete>-1 && output) {\ + progTime[jobs_complete] = _end.tv_sec - _start.tv_sec;\ progTime[jobs_complete] *= 1000000000;\ - progTime[jobs_complete] += end.tv_nsec - start.tv_nsec;\ + progTime[jobs_complete] += _end.tv_nsec - _start.tv_nsec;\ } #endif @@ -187,7 +197,7 @@ munlockall();\ FILE *fp=fopen(fileName, "a");\ if (fp == NULL) {\ - perror("Error opening file. \n");\ + perror("Unable to open output file");\ exit(1);\ }\ for(int i = 0; i <= jobs_complete; i++){\ @@ -226,19 +236,19 @@ /* This disables profiling, resets the counters, clears the overflow bit, and enables profiling */ \ start_mmdc_profiling(mmdc); \ /*nanosleep(&(struct timespec){0, ms2ns(999)}, NULL);*/ \ - clock_gettime(CLOCK_MONOTONIC, &start); + clock_gettime(CLOCK_MONOTONIC, &_start); #else -#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &start); +#define START_TIMER clock_gettime(CLOCK_MONOTONIC, &_start); #endif #if MMDC_PROF #define STOP_TIMER \ - clock_gettime(CLOCK_MONOTONIC, &end); \ + clock_gettime(CLOCK_MONOTONIC, &_end); \ /* This freezes the profiling and makes results available */ \ pause_mmdc_profiling(mmdc); \ get_mmdc_profiling_results(mmdc, &mmdc_res); #else -#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &end); +#define STOP_TIMER clock_gettime(CLOCK_MONOTONIC, &_end); #endif #define SLEEP nanosleep((const struct timespec[]){{0, 1000000}}, NULL); -- cgit v1.2.2