From e9285d0cdea756a2830f0ace378e4197b36869aa Mon Sep 17 00:00:00 2001 From: Joshua Bakita Date: Fri, 12 Jun 2020 01:44:56 +0000 Subject: Add initial instrumentation to and fix warnings in DIS stressmarks Changes: - Backpoint fix to randInt range - Instrument benchmarks with time tracking - assert inputs are correct length to fix compiler warnings Problems: - Timing on a per-loop basis is non representative of real-world workloads, as we clear the cache after every loop. These all need to be re-instrumented to record times for the whole benchmark, rather than per-loop. --- dis/original/Field/field.c | 9 +++++---- dis/original/Matrix/ver2/matrix.c | 12 ++++++++++-- dis/original/Neighborhood/neighborhood.c | 6 +++--- dis/original/Pointer/pointer.c | 10 +++++----- dis/original/Transitive/transitive.c | 7 +++++-- dis/original/Update/update.c | 8 ++++---- 6 files changed, 32 insertions(+), 20 deletions(-) (limited to 'dis') diff --git a/dis/original/Field/field.c b/dis/original/Field/field.c index a561f72..8565e8c 100644 --- a/dis/original/Field/field.c +++ b/dis/original/Field/field.c @@ -22,7 +22,7 @@ #define MIN_FIELD_SIZE 16 -#define MAX_FIELD_SIZE 16777216 +#define MAX_FIELD_SIZE (16777216*4) // This has been quadrupled from original #define MIN_SEED -2147483647 #define MAX_SEED -1 #define MIN_MOD_OFFSET 0 @@ -62,7 +62,7 @@ int main(int argc, char** argv){ unsigned int l; - fscanf(stdin, "%d %d %d %d", &f, &seed, &mod_offset, &n); + assert(fscanf(stdin, "%d %d %d %d", &f, &seed, &mod_offset, &n) == 4); assert((f >= MIN_FIELD_SIZE) && (f <= MAX_FIELD_SIZE)); assert((seed >= MIN_SEED) && (seed <= MAX_SEED)); @@ -72,12 +72,12 @@ int main(int argc, char** argv){ int x; int index; index = 0; - fscanf(stdin,"%x", &x); + assert(fscanf(stdin,"%x", &x) == 1); while(x!=0){ assert((x >= MIN_TOKEN_VALUE) && (x <= MAX_TOKEN_VALUE)); token[l].delimiter[index] = (unsigned char )x; index++; - fscanf(stdin,"%x", &x); + assert(fscanf(stdin,"%x", &x) == 1); } assert((index >= MIN_TOKEN_LENGTH) && (index <= MAX_TOKEN_LENGTH)); token[l].length = index; @@ -132,6 +132,7 @@ int main(int argc, char** argv){ } index++; } + token[l].subfields++; STOP_LOOP } diff --git a/dis/original/Matrix/ver2/matrix.c b/dis/original/Matrix/ver2/matrix.c index 56245a6..957d7c5 100755 --- a/dis/original/Matrix/ver2/matrix.c +++ b/dis/original/Matrix/ver2/matrix.c @@ -41,6 +41,7 @@ #include #include #include "DISstressmarkRNG.h" +#include "extra.h" #define MIN_SEED -2147483647 #define MAX_SEED -1 @@ -60,6 +61,8 @@ */ static int dim; +int argc; +char** argv; /* * matrix * vector @@ -329,6 +332,7 @@ void biConjugateGradient(double *value, int i; int l; int ll; + SET_UP alpha = 0; beta = 0; @@ -365,6 +369,7 @@ void biConjugateGradient(double *value, iteration = 0; while ((iteration < maxIterations) && (error > errorTolerance)){ + START_LOOP /* * alpha = (transpose(vectorR) * vectorR) / @@ -429,6 +434,7 @@ void biConjugateGradient(double *value, error = vectorValue(tmpVector1)/vectorValue(vectorB); iteration++; + STOP_LOOP } *actualError = error; @@ -440,6 +446,7 @@ void biConjugateGradient(double *value, free(vectorR); free(vectorP); + WRITE_TO_FILE return; } @@ -508,9 +515,10 @@ void create_CRS(double *matrixA, } - -int main() +int main(int _argc, char** _argv) { + argc = _argc; + argv = _argv; int seed; int numberNonzero; int maxIterations; diff --git a/dis/original/Neighborhood/neighborhood.c b/dis/original/Neighborhood/neighborhood.c index 2d50336..1736d38 100644 --- a/dis/original/Neighborhood/neighborhood.c +++ b/dis/original/Neighborhood/neighborhood.c @@ -42,10 +42,10 @@ int main(int argc, char** argv) time_t endTime; SET_UP - fscanf(stdin, "%ld %d %d %d %d %d %d %d", + assert(fscanf(stdin, "%ld %d %d %d %d %d %d %d", &seed, &bitDepth, &dimension, &numberLines, &minThickness, &maxThickness, - &distanceShort, &distanceLong); + &distanceShort, &distanceLong) == 8); assert((seed >= MIN_SEED) && (seed <= MAX_SEED)); assert((dimension > 0) && (dimension <= MAX_DIMENSION)); @@ -70,7 +70,7 @@ int main(int argc, char** argv) endTime = time(NULL); WRITE_TO_FILE - printf(" end time is %d\n", endTime); +// printf(" end time is %d\n", endTime); fprintf(stdout, "%9.4e %9.4e %9.4e %9.4e %9.4e %9.4e %9.4e %9.4e", values.distShort.deg0.entropy, diff --git a/dis/original/Pointer/pointer.c b/dis/original/Pointer/pointer.c index a0aa62e..5671697 100644 --- a/dis/original/Pointer/pointer.c +++ b/dis/original/Pointer/pointer.c @@ -20,7 +20,7 @@ #include "extra.h" #define MIN_FIELD_SIZE 16 -#define MAX_FIELD_SIZE 16777216 +#define MAX_FIELD_SIZE (16777216*4) // Modifed from original #define MIN_WINDOW_SIZE 1 #define MAX_WINDOW_SIZE 15 #define MIN_HOP_LIMIT 1 @@ -56,8 +56,8 @@ int main(int argc, char** argv){ unsigned int l; SET_UP - fscanf(stdin, "%lu %u %lu %ld %u", - &f, &l, &maxhops, &seed, &n); + assert(fscanf(stdin, "%lu %u %lu %ld %u", + &f, &l, &maxhops, &seed, &n) == 5); assert ((f >= MIN_FIELD_SIZE) && (f <= MAX_FIELD_SIZE)); w = (unsigned int) l; @@ -72,8 +72,8 @@ int main(int argc, char** argv){ return (-1); for (l=0; l= 0) && (thread[l].initial < f)); assert ((thread[l].minStop >= 0) && (thread[l].minStop < f)); assert ((thread[l].maxStop >= 0) && (thread[l].maxStop < f)); diff --git a/dis/original/Transitive/transitive.c b/dis/original/Transitive/transitive.c index ca16a31..5fa52e8 100644 --- a/dis/original/Transitive/transitive.c +++ b/dis/original/Transitive/transitive.c @@ -11,6 +11,9 @@ * read the Benchmark Analysis and Specifications Document Version 1.0 * before going on since the detailed comments are given in this documents. * the comments are not repeated here. + * + * CHANGELOG: + * Joshua Bakita, 05/30/2020: Fixed out-of-bounds randInt call */ #include @@ -64,8 +67,8 @@ int main(int argc, char** argv){ randInit(seed); for (k=0; k= MIN_FIELD_SIZE) && (f <= MAX_FIELD_SIZE)); w = (unsigned int )l; @@ -92,7 +92,7 @@ int main(int argc, char** argv){ unsigned int max, min; unsigned int partition; unsigned int high; - START_LOOP + if (hops % 100 == 0) {START_LOOP} // These loops are too quick to sample individually max = MAX_FIELD_SIZE; min = 0; high = 0; @@ -125,7 +125,7 @@ int main(int argc, char** argv){ field[index] = sum % (f-w); index = (partition+hops)%(f-w); hops++; - STOP_LOOP + if (hops % 100 == 0) {STOP_LOOP} // These loops are too quick to sample individually }/* end for loop */ startTime = time(NULL) - startTime; -- cgit v1.2.2