summaryrefslogtreecommitdiffstats
path: root/dis/Transitive
diff options
context:
space:
mode:
authorJoshua Bakita <jbakita@cs.unc.edu>2020-10-17 14:43:46 -0400
committerJoshua Bakita <jbakita@cs.unc.edu>2020-10-17 14:43:46 -0400
commita3886552003d031acb9039e920b7c9ddce946ad6 (patch)
treec3b6a400a9ba31e744e6218365d63bdfbbc45a83 /dis/Transitive
parent917499f6257ac51c05e8302af877d56a22f28cb5 (diff)
DIS fixes used for (rejected) RTSS'20 submission
- All: Output times to stderr and nothing to stdout - Field, Update, Pointer: change definition of a job to match other stressmark execution times more closely - Matrix: move all allocations into main() - Update: Use volatile to prevent computations from being optimized out - Transitive: Use volatile to prevent computations from being optimized out - Neighborhood: Use working version of drawLineSegment from original DIS sample code
Diffstat (limited to 'dis/Transitive')
-rw-r--r--dis/Transitive/transitive.c92
1 files changed, 47 insertions, 45 deletions
diff --git a/dis/Transitive/transitive.c b/dis/Transitive/transitive.c
index 5fa52e8..303216f 100644
--- a/dis/Transitive/transitive.c
+++ b/dis/Transitive/transitive.c
@@ -45,20 +45,21 @@ int main(int argc, char** argv){
45 unsigned int i, j, k; 45 unsigned int i, j, k;
46 int seed; 46 int seed;
47 47
48 time_t startTime; 48 time_t startTime, stopTime;
49 unsigned int sum; 49 unsigned int sum;
50 50 volatile int realRes = 0;
51 fscanf(stdin,"%d %d %d", &n, &m, &seed); 51
52 assert(fscanf(stdin,"%d %d %d", &n, &m, &seed) == 3);
52 53
53 assert((n >= MIN_VERTICES) && (n <= MAX_VERTICES)); 54 assert((n >= MIN_VERTICES) && (n <= MAX_VERTICES));
54 assert((m >= MIN_EDGES) && (m <= MAX_EDGES)); 55 assert((m >= MIN_EDGES) && (m <= MAX_EDGES));
55 assert (m <= n*n); 56 assert(m <= n*n);
56 assert ((seed >= MIN_SEED) && (seed <= MAX_SEED)); 57 assert((seed >= MIN_SEED) && (seed <= MAX_SEED));
57 58
58 if ((din = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) 59 if ((din = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL)
59 return (-1); 60 return (-1);
60 if ((dout = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL) 61 if ((dout = (unsigned int *)malloc(n*n*sizeof(unsigned int))) == NULL)
61 return (-1); 62 return (-1);
62 63
63 for (i=0; i<n*n; i++){ 64 for (i=0; i<n*n; i++){
64 *(din + i) = NO_PATH; 65 *(din + i) = NO_PATH;
@@ -75,53 +76,54 @@ int main(int argc, char** argv){
75 SET_UP 76 SET_UP
76 startTime = time(NULL); 77 startTime = time(NULL);
77 78
79 START_LOOP
78 for (k=0; k<n; k++){ 80 for (k=0; k<n; k++){
79 unsigned int old; 81 unsigned int old;
80 unsigned int new1; 82 unsigned int new1;
81 unsigned int *dtemp; 83 unsigned int *dtemp;
82 START_LOOP 84
83
84 for (i=0; i<n; i++){ 85 for (i=0; i<n; i++){
85 for (j=0; j<n; j++){ 86 for (j=0; j<n; j++){
86 old = *(din + j*n + i); 87 old = *(din + j*n + i);
87 new1 = *(din + j*n + k) + *(din + k*n + i); 88 new1 = *(din + j*n + k) + *(din + k*n + i);
88 *(dout + j*n + i) = (new1 < old ? new1: old); 89 *(dout + j*n + i) = (new1 < old ? new1: old);
89 assert (*(dout + j*n + i) <= NO_PATH); 90 assert(*(dout + j*n + i) <= NO_PATH);
90 assert (*(dout + j*n + i) <= *(din + j*n + i)); 91 assert(*(dout + j*n + i) <= *(din + j*n + i));
91 } 92 }
92 } 93 }
93 dtemp = dout; 94 dtemp = dout;
94 dout = din; 95 dout = din;
95 din = dtemp; 96 din = dtemp;
96 STOP_LOOP 97 }
97 }
98 98
99 startTime = time(NULL) - startTime; 99 STOP_LOOP
100 100 stopTime = time(NULL);
101 for (j=0; j<n; j++){ 101
102 sum = 0; 102 for (j=0; j<n; j++){
103 for (i=0; i<n; i++){ 103 sum = 0;
104 if (*(din + j*n + i) != NO_PATH)
105 sum += *(din + j*n + i);
106 }
107 fprintf(stdout, "%u\n", sum);
108 }
109 for (i=0; i<n; i++){ 104 for (i=0; i<n; i++){
110 sum = 0; 105 if (*(din + j*n + i) != NO_PATH)
111 for (j=0; j<n; j++){ 106 sum += *(din + j*n + i);
112 if (*(din + j*n + i) != NO_PATH)
113 sum += *(din+j*n+i);
114 }
115
116 fprintf(stdout, "%u\n", sum);
117 } 107 }
118 108 realRes+=sum;
119 fprintf(stdout, " total time = %u seconds. \n", (unsigned int)startTime); 109 //fprintf(stdout, "%u ", sum);
120 free(din); 110 }
121 free(dout); 111 for (i=0; i<n; i++){
122 WRITE_TO_FILE 112 sum = 0;
123 return(0); 113 for (j=0; j<n; j++){
114 if (*(din + j*n + i) != NO_PATH)
115 sum += *(din+j*n+i);
116 }
117 realRes+=sum;
118 //fprintf(stdout, "%u ", sum);
124 } 119 }
120 fprintf(stderr, "time for transitive stressmark = %f seconds.\n",
121 difftime(stopTime, startTime));
122 free(din);
123 free(dout);
124 WRITE_TO_FILE
125 return(0);
126}
125 127
126 128
127 129