summaryrefslogtreecommitdiffstats
path: root/dis/Neighborhood/utili.h
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/Neighborhood/utili.h
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/Neighborhood/utili.h')
-rw-r--r--dis/Neighborhood/utili.h161
1 files changed, 53 insertions, 108 deletions
diff --git a/dis/Neighborhood/utili.h b/dis/Neighborhood/utili.h
index 2a8e2a0..5b54d9b 100644
--- a/dis/Neighborhood/utili.h
+++ b/dis/Neighborhood/utili.h
@@ -56,81 +56,23 @@ typedef struct {
56 56
57typedef short int Pixel; /* short int;*/ 57typedef short int Pixel; /* short int;*/
58 58
59typedef struct {
60 int numColumns; /* number of columns in image */
61 int numRows; /* number of rows in image */
62 Pixel maxImageValue; /* max legal image value */
63 Pixel *data; /* data pointer */
64} Image;
59 65
60void drawLineSegment(Pixel *image, 66// For correct implementation of drawLineSegment
61 Coord startPoint, 67#include "initializeImage.c"
62 Coord endPoint,
63 int startValue,
64 int endValue,
65 int thickness,
66 int dimension)
67 {
68 int changeColumn, changeRow;
69 int delta;
70 int column, row;
71 float value, valueDelta;
72 int t;
73
74 changeColumn = endPoint.column - startPoint.column;
75 changeRow = endPoint.row - startPoint.row;
76
77 assert((changeRow != 0) || (changeColumn != 0));
78
79 column = startPoint.column;
80 row = startPoint.row;
81 value = startValue;
82
83 if (ABS(changeColumn) > ABS(changeRow)){
84 valueDelta = ((float) endValue - startValue)/
85 ((float) ABS(changeColumn));
86 delta = 2*ABS(row) - ABS(column);
87 for (column = startPoint.column;
88 column == endPoint.column+sign(changeColumn);
89 column += sign(changeColumn)){
90 for (t = MAX(0, row-thickness/2);
91 t < MIN(dimension, row+thickness - thickness/2);
92 t++)
93 image[t*dimension + column] = (int)value;
94 value += valueDelta;
95 if (delta >= 0){
96 row += sign(changeRow);
97 delta -= 2*ABS(changeColumn);
98 }
99 column += sign(changeColumn);
100 delta += 2*ABS(changeRow);
101 }
102 }
103 else {
104 valueDelta = ((float) endValue - startValue)/
105 ((float) ABS(changeRow));
106 delta = 2* ABS(column) - ABS(row);
107 for (row = startPoint.row;
108 row == endPoint.row + sign(changeRow);
109 row += sign(changeRow)){
110 for (t = MAX(0, column-thickness/2);
111 t < MIN(dimension, row + thickness - thickness/2);
112 t++)
113 image[row*dimension + t] = (int)value;
114 if (delta >= 0){
115 column += sign(changeColumn);
116 delta -= 2*ABS(changeRow);
117 }
118 row += sign(changeRow);
119 delta += 2*ABS(changeColumn);
120 }
121 }
122 return;
123 }
124
125
126 68
127Pixel *createImage (int dimension, 69Pixel *createImage (Pixel *image,
70 int dimension,
128 Pixel maxPixel, 71 Pixel maxPixel,
129 int numberLines, 72 int numberLines,
130 int minThickness, 73 int minThickness,
131 int maxThickness) 74 int maxThickness)
132 { 75 {
133 Pixel *image;
134 int i; 76 int i;
135 77
136 Coord startPoint; 78 Coord startPoint;
@@ -138,9 +80,12 @@ Pixel *createImage (int dimension,
138 int thickness; 80 int thickness;
139 int startValue; 81 int startValue;
140 int endValue; 82 int endValue;
83 Image img;
84 img.numColumns = dimension;
85 img.numRows = dimension;
86 img.maxImageValue = maxPixel;
87 img.data = image;
141 88
142 image = (Pixel *)malloc(sizeof(Pixel) * dimension * dimension);
143 assert (image != NULL);
144 for (i=0; i<dimension*dimension; i++){ 89 for (i=0; i<dimension*dimension; i++){
145 image[i] = 0; 90 image[i] = 0;
146 } 91 }
@@ -154,6 +99,7 @@ Pixel *createImage (int dimension,
154 startPoint.column = (int) temp % dimension; 99 startPoint.column = (int) temp % dimension;
155 prev = temp; 100 prev = temp;
156 101
102 // Make sure that the end is different than the start
157 while((temp = randomUInt(0, dimension*dimension -1)) == prev); 103 while((temp = randomUInt(0, dimension*dimension -1)) == prev);
158 104
159 endPoint.row = (int) temp/dimension; 105 endPoint.row = (int) temp/dimension;
@@ -163,11 +109,11 @@ Pixel *createImage (int dimension,
163 startValue = randomUInt(MIN_PIXEL, maxPixel); 109 startValue = randomUInt(MIN_PIXEL, maxPixel);
164 endValue = randomUInt(MIN_PIXEL, maxPixel); 110 endValue = randomUInt(MIN_PIXEL, maxPixel);
165 111
166 drawLineSegment(image, startPoint, endPoint, 112 drawLineSegment(&startPoint, &endPoint,
167 startValue, endValue, thickness, dimension); 113 startValue, endValue, thickness, &img);
168 } 114 }
169 return(image); 115 return(image);
170 } 116}
171 117
172 118
173void calcEntropyEnergy( 119void calcEntropyEnergy(
@@ -214,10 +160,10 @@ void calcEntropyEnergy(
214 columnHigh = dimension; 160 columnHigh = dimension;
215 } 161 }
216 else 162 else
217 { 163 {
218 columnLow = 0; 164 columnLow = 0;
219 columnHigh = dimension - dx; 165 columnHigh = dimension - dx;
220 } 166 }
221 167
222 totalNumPixels = 0; 168 totalNumPixels = 0;
223 value0RowOffset = rowLow * dimension; 169 value0RowOffset = rowLow * dimension;
@@ -225,27 +171,27 @@ void calcEntropyEnergy(
225 171
226 for (rowIndex = rowLow; rowIndex<rowHigh; rowIndex++){ 172 for (rowIndex = rowLow; rowIndex<rowHigh; rowIndex++){
227 for (columnIndex= columnLow; columnIndex<columnHigh; 173 for (columnIndex= columnLow; columnIndex<columnHigh;
228 columnIndex++){ 174 columnIndex++){
229 int value0; 175 int value0;
230 int value1; 176 int value1;
231 int binIndex; 177 int binIndex;
232 178
233 rowForPixelAtDistance = rowIndex + dy; 179 rowForPixelAtDistance = rowIndex + dy;
234 columnForPixelAtDistance = columnIndex + dx; 180 columnForPixelAtDistance = columnIndex + dx;
235 181
236 value0 = *(image + value0RowOffset + columnIndex); 182 value0 = *(image + value0RowOffset + columnIndex);
237 value1 = *(image + value1RowOffset + 183 value1 = *(image + value1RowOffset +
238 columnForPixelAtDistance); 184 columnForPixelAtDistance);
239 185
240 binIndex = value0 + value1 - 2*MIN_PIXEL; 186 binIndex = value0 + value1 - 2*MIN_PIXEL;
241 assert((binIndex >= 0) && (binIndex < numBins)); 187 assert((binIndex >= 0) && (binIndex < numBins));
242 sumHist[binIndex] += 1; 188 sumHist[binIndex] += 1;
243 binIndex = value0 - value1 + maxPixel - MIN_PIXEL; 189 binIndex = value0 - value1 + maxPixel - MIN_PIXEL;
244 190
245 assert((binIndex >= 0) && (binIndex < numBins)); 191 assert((binIndex >= 0) && (binIndex < numBins));
246 192
247 diffHist[binIndex] += 1; 193 diffHist[binIndex] += 1;
248 totalNumPixels += 1; 194 totalNumPixels += 1;
249