54 return ( (fRec[(
count>>1)-1].init +
55 fRec[(
count>>1)].init)/2.0 );
67 return ( (fRec[(
count>>1)-1].pcpVal +
68 fRec[(
count>>1)].pcpVal)/2.0 );
76void histogram(
int *BinCount,
int bins,
int total,
double minVal,
double width) {
79 for (
i=0;
i<bins;
i++) {
80 ctr = minVal + ( (
i+.5)*width);
81 pcnt = (100.*BinCount[
i]) / (
total+0.0);
82 printf(
"%8.1f, %8i, =%5.2f%%\n", ctr, BinCount[
i], pcnt);
91int main(
int argc,
char **argv) {
96 char title1[128], title2[128];
97 int count=0, size=Block;
100 fprintf(
stderr,
"You must specify a CSV file on the command line.\n");
104 Inp =fopen(argv[1],
"r");
106 fprintf(
stderr,
"Error reading file %s.\n", argv[1]);
110 ret = fscanf(Inp,
"%128[^,],%128[^\n]", title1, title2);
112 fprintf(
stderr,
"File Format Error, read %i of 2 expected column titles in file '%s'.\n", ret, argv[1]);
118 ret = fscanf(Inp,
"%lf,%*[ ]%lf\n", &fRec[
count].init, &fRec[
count].pcpVal);
119 if (ret == EOF)
break;
121 fprintf(
stderr,
"File Format Error, read %i of 2 expected column values in file '%s', line %i.\n", ret, argv[1],
count+2);
132 fprintf(
stderr,
"Memory failure, failed to realloc(fRec, %i)\n", size);
140 fprintf(
stderr,
"Read a total of %i data lines.\n",
count);
143 double minInit=fRec[0].
init;
144 double maxInit=minInit;
145 double firstInit=minInit;
146 double avgInit=minInit;
147 double maxBut1Init = fRec[1].
init;
149 double minPCP=fRec[0].
pcpVal;
150 double maxPCP=minPCP;
151 double firstPCP=minPCP;
152 double avgPCP=minPCP;
153 double maxBut1PCP = fRec[1].
pcpVal;
158 if (v > maxInit) maxInit=v;
159 if (v > maxBut1Init) maxBut1Init=v;
160 if (v < minInit) minInit=v;
164 if (v > maxPCP) maxPCP=v;
165 if (v > maxBut1PCP) maxBut1PCP=v;
166 if (v < minPCP) minPCP=v;
170 avgInit /= ((double)
count);
171 avgPCP /= ((double)
count);
179 int maxBin, *InitBins=NULL, *ReadBins=NULL;
180 int bins = ceil(sqrtf((
double)
count));
181 int expCount = round(((
count+0.0) / (bins+0.0)));
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));
193 double v = fRec[
i].
init - minInit;
194 for (j=0; j<bins; j++) {
195 if (v < (j+1)*Initbin)
break;
202 for (
i=1;
i<bins;
i++) {
203 if (InitBins[
i] > InitBins[maxBin]) maxBin=
i;
206 double modeInit = minInit + ((maxBin+0.5) * Initbin);
207 int actInitCount = InitBins[maxBin];
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));
219 double v = fRec[
i].
pcpVal - minPCP;
220 for (j=0; j<bins; j++) {
221 if (v < (j+1)*PCPbin)
break;
228 for (
i=1;
i<bins;
i++) {
229 if (ReadBins[
i] > ReadBins[maxBin]) maxBin=
i;
232 double modePCP = minPCP + ((maxBin+0.5) * PCPbin);
233 int actPCPCount = ReadBins[maxBin];
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 );
253 printf(
"Initialization Histogram:\n"
254 "binCenter, Count, %% of Count\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 );
274 printf(
"Read Event Histogram:\n"
275 "binCenter, Count, %% of Count\n");
279 free(InitBins); InitBins=NULL;
280 free(ReadBins); ReadBins=NULL;
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)
Return codes and api definitions.
int fclose(FILE *__stream)