91 {
93 FILE *Inp;
94 int Block = 64;
96 char title1[128], title2[128];
97 int count=0, size=Block;
98
99 if (argc != 2) {
100 fprintf(
stderr,
"You must specify a CSV file on the command line.\n");
101 exit(-1);
102 }
103
104 Inp =fopen(argv[1], "r");
105 if (Inp == NULL) {
106 fprintf(
stderr,
"Error reading file %s.\n", argv[1]);
107 exit(-1);
108 }
109
110 ret = fscanf(Inp, "%128[^,],%128[^\n]", title1, title2);
111 if (ret !=2) {
112 fprintf(
stderr,
"File Format Error, read %i of 2 expected column titles in file '%s'.\n", ret, argv[1]);
114 exit(-1);
115 }
116
117 while (1) {
118 ret = fscanf(Inp,
"%lf,%*[ ]%lf\n", &fRec[
count].init, &fRec[
count].pcpVal);
119 if (ret == EOF) break;
120 if (ret != 2) {
121 fprintf(
stderr,
"File Format Error, read %i of 2 expected column values in file '%s', line %i.\n", ret, argv[1],
count+2);
123 free(fRec);
124 exit(-1);
125 }
126
129 size += Block;
131 if (fRec == NULL) {
132 fprintf(
stderr,
"Memory failure, failed to realloc(fRec, %i)\n", size);
134 exit(-1);
135 }
136 }
137 }
138
140 fprintf(
stderr,
"Read a total of %i data lines.\n",
count);
141
142
143 double minInit=fRec[0].
init;
144 double maxInit=minInit;
145 double firstInit=minInit;
146 double avgInit=minInit;
147 double maxBut1Init = fRec[1].
init;
148
149 double minPCP=fRec[0].
pcpVal;
150 double maxPCP=minPCP;
151 double firstPCP=minPCP;
152 double avgPCP=minPCP;
153 double maxBut1PCP = fRec[1].
pcpVal;
154
156 double v;
158 if (v > maxInit) maxInit=v;
159 if (v > maxBut1Init) maxBut1Init=v;
160 if (v < minInit) minInit=v;
161 avgInit += v;
162
164 if (v > maxPCP) maxPCP=v;
165 if (v > maxBut1PCP) maxBut1PCP=v;
166 if (v < minPCP) minPCP=v;
167 avgPCP += v;
168 }
169
170 avgInit /= ((double)
count);
171 avgPCP /= ((double)
count);
172
173
174
175
176
177
178
179 int maxBin, *InitBins=NULL, *ReadBins=NULL;
180 int bins = ceil(sqrtf((
double)
count));
181 int expCount = round(((
count+0.0) / (bins+0.0)));
182
183
185
187 double Initrange=(maxInit-minInit);
188 double Initbin=ceil(Initrange/bins);
189 if (Initbin == 0.0) Initbin=1.0;
190 InitBins = calloc(bins, sizeof(int));
191
193 double v = fRec[
i].
init - minInit;
194 for (j=0; j<bins; j++) {
195 if (v < (j+1)*Initbin) break;
196 }
197
198 InitBins[j]++;
199 }
200
201 maxBin = 0;
202 for (
i=1;
i<bins;
i++) {
203 if (InitBins[
i] > InitBins[maxBin]) maxBin=
i;
204 }
205
206 double modeInit = minInit + ((maxBin+0.5) * Initbin);
207 int actInitCount = InitBins[maxBin];
208
209
210
213 double PCPrange=(maxPCP-minPCP);
214 double PCPbin=ceil(PCPrange/bins);
215 if (PCPbin == 0.0) PCPbin=1.0;
216 ReadBins = calloc(bins, sizeof(int));
217
219 double v = fRec[
i].
pcpVal - minPCP;
220 for (j=0; j<bins; j++) {
221 if (v < (j+1)*PCPbin) break;
222 }
223
224 ReadBins[j]++;
225 }
226
227 maxBin = 0;
228 for (
i=1;
i<bins;
i++) {
229 if (ReadBins[
i] > ReadBins[maxBin]) maxBin=
i;
230 }
231
232 double modePCP = minPCP + ((maxBin+0.5) * PCPbin);
233 int actPCPCount = ReadBins[maxBin];
234
235
236
237
238 printf("Stats for Initialization time in file '%s'.\n" , argv[1] );
239 printf(
"Sample Values ,%8i\n" ,
count );
240 printf("Minimum uS ,%8.1f\n", minInit );
241 printf("Maximum uS ,%8.1f\n", maxInit );
242 printf("Average uS ,%8.1f\n", avgInit );
243 printf("Median uS ,%8.1f\n", medInit );
244 printf("First uS ,%8.1f\n", firstInit );
245 printf("Max w/o First ,%8.1f\n", maxBut1Init );
246 printf("Range uS ,%8.1f\n", Initrange );
247 printf("Histogram Bins chosen ,%8i\n" , bins );
248 printf("Bin width uS ,%8.1f\n", Initbin );
249 printf("Mode (center highest Bin Count),%8.1f\n", modeInit );
250 printf("Mode Bin Count ,%8i\n" , actInitCount );
251 printf("Bin Expected Count ,%8i\n" , expCount );
252 printf("\n");
253 printf("Initialization Histogram:\n"
254 "binCenter, Count, %% of Count\n");
255
257
258 printf("\n");
259 printf("Stats for PCP event read time in file '%s'.\n" , argv[1] );
260 printf(
"Sample Values ,%8i\n" ,
count );
261 printf("Minimum uS ,%8.1f\n", minPCP );
262 printf("Maximum uS ,%8.1f\n", maxPCP );
263 printf("Average uS ,%8.1f\n", avgPCP );
264 printf("Median uS ,%8.1f\n", medPCP );
265 printf("First uS ,%8.1f\n", firstPCP );
266 printf("Max w/o First ,%8.1f\n", maxBut1PCP );
267 printf("Range uS ,%8.1f\n", PCPrange );
268 printf("Histogram Bins chosen ,%8i\n" , bins );
269 printf("Bin width uS ,%8.1f\n", PCPbin );
270 printf("Mode (center highest Bin Count),%8.1f\n", modePCP );
271 printf("Mode Bin Count ,%8i\n" , actPCPCount );
272 printf("Bin Expected Count ,%8i\n" , expCount );
273 printf("\n");
274 printf("Read Event Histogram:\n"
275 "binCenter, Count, %% of Count\n");
276
278 printf("\n");
279 free(InitBins); InitBins=NULL;
280 free(ReadBins); ReadBins=NULL;
281 free(fRec);
282}
double median_BDPCP(BenchData_t *fRec, int count)
int sortAscBDPCP(const void *vA, const void *vB)
int sortAscBDInit(const void *vA, const void *vB)
void histogram(int *BinCount, int bins, int total, double minVal, double width)
double median_BDInit(BenchData_t *fRec, int count)
int fclose(FILE *__stream)