/***************** ** read_comfile ** ****************** ** Read the command file. Set global parameters as ** specified. This routine assumes that the command file ** is already open. */ static void read_comfile(FILE *cfile) { char inbuf[40]; char *eptr; /* Offset to "=" sign */ int i; /* Index */ /* ** Sit in a big loop, reading a line from the file at each ** pass. Terminate on EOF. */ while(fgets(inbuf,39,cfile)!=(char *)NULL) { /* Overwrite the CR character */ if(strlen(inbuf)>0) inbuf[strlen(inbuf)-1]='\0'; /* ** Parse up to the "=" sign. If we don't find an ** "=", then flag an error. */ if((eptr=strchr(inbuf,(int)'='))==(char *)NULL) { printf("**COMMAND FILE ERROR at LINE:\n %s\n", inbuf); goto skipswitch; /* A GOTO!!!! */ } /* ** Insert a null where the "=" was, then convert ** the substring to uppercase. That will enable ** us to perform the match. */ *eptr++='\0'; strtoupper((char *)&inbuf[0]); i=MAXPARAM; do { if(strcmp(inbuf,paramnames[i])==0) break; } while(--i>=0); if(i<0) { printf("**COMMAND FILE ERROR -- UNKNOWN PARAM: %s", inbuf); goto skipswitch; } /* ** Advance eptr to the next field...which should be ** the value assigned to the parameter. */ switch(i) { case PF_GMTICKS: /* GLOBALMINTICKS */ global_min_ticks=(ulong)atol(eptr); break; case PF_MINSECONDS: /* MINSECONDS */ global_min_seconds=(ulong)atol(eptr); set_request_secs(); break; case PF_ALLSTATS: /* ALLSTATS */ global_allstats=getflag(eptr); break; case PF_OUTFILE: /* OUTFILE */ strcpy(global_ofile_name,eptr); global_ofile=fopen(global_ofile_name,"a"); /* ** Open the output file. */ if(global_ofile==(FILE *)NULL) { printf("**Error opening output file: %s\n", global_ofile_name); ErrorExit(); } write_to_file=-1; break; case PF_CUSTOMRUN: /* CUSTOMRUN */ global_custrun=getflag(eptr); for(i=0;i<NUMTESTS;i++) tests_to_do[i]=1-global_custrun; break; case PF_DONUM: /* DONUMSORT */ tests_to_do[TF_NUMSORT]=getflag(eptr); break; case PF_NUMNUMA: /* NUMNUMARRAYS */ global_numsortstruct.numarrays= (ushort)atoi(eptr); global_numsortstruct.adjust=1; break; case PF_NUMASIZE: /* NUMARRAYSIZE */ global_numsortstruct.arraysize= (ulong)atol(eptr); break; case PF_NUMMINS: /* NUMMINSECONDS */ global_numsortstruct.request_secs= (ulong)atol(eptr); break; case PF_DOSTR: /* DOSTRINGSORT */ tests_to_do[TF_SSORT]=getflag(eptr); break; case PF_STRASIZE: /* STRARRAYSIZE */ global_strsortstruct.arraysize= (ulong)atol(eptr); break; case PF_NUMSTRA: /* NUMSTRARRAYS */ global_strsortstruct.numarrays= (ushort)atoi(eptr); global_strsortstruct.adjust=1; break; case PF_STRMINS: /* STRMINSECONDS */ global_strsortstruct.request_secs= (ulong)atol(eptr); break; case PF_DOBITF: /* DOBITFIELD */ tests_to_do[TF_BITOP]=getflag(eptr); break; case PF_NUMBITOPS: /* NUMBITOPS */ global_bitopstruct.bitoparraysize= (ulong)atol(eptr); global_bitopstruct.adjust=1; break; case PF_BITFSIZE: /* BITFIELDSIZE */ global_bitopstruct.bitfieldarraysize= (ulong)atol(eptr); break; case PF_BITMINS: /* BITMINSECONDS */ global_bitopstruct.request_secs= (ulong)atol(eptr); break; case PF_DOEMF: /* DOEMF */ tests_to_do[TF_FPEMU]=getflag(eptr); break; case PF_EMFASIZE: /* EMFARRAYSIZE */ global_emfloatstruct.arraysize= (ulong)atol(eptr); break; case PF_EMFLOOPS: /* EMFLOOPS */ global_emfloatstruct.loops= (ulong)atol(eptr); break; case PF_EMFMINS: /* EMFMINSECOND */ global_emfloatstruct.request_secs= (ulong)atol(eptr); break; case PF_DOFOUR: /* DOFOUR */ tests_to_do[TF_FFPU]=getflag(eptr); break; case PF_FOURASIZE: /* FOURASIZE */ global_fourierstruct.arraysize= (ulong)atol(eptr); global_fourierstruct.adjust=1; break; case PF_FOURMINS: /* FOURMINSECONDS */ global_fourierstruct.request_secs= (ulong)atol(eptr); break; case PF_DOASSIGN: /* DOASSIGN */ tests_to_do[TF_ASSIGN]=getflag(eptr); break; case PF_AARRAYS: /* ASSIGNARRAYS */ global_assignstruct.numarrays= (ulong)atol(eptr); break; case PF_ASSIGNMINS: /* ASSIGNMINSECONDS */ global_assignstruct.request_secs= (ulong)atol(eptr); break; case PF_DOIDEA: /* DOIDEA */ tests_to_do[TF_IDEA]=getflag(eptr); break; case PF_IDEAASIZE: /* IDEAARRAYSIZE */ global_ideastruct.arraysize= (ulong)atol(eptr); break; case PF_IDEALOOPS: /* IDEALOOPS */ global_ideastruct.loops= (ulong)atol(eptr); break; case PF_IDEAMINS: /* IDEAMINSECONDS */ global_ideastruct.request_secs= (ulong)atol(eptr); break; case PF_DOHUFF: /* DOHUFF */ tests_to_do[TF_HUFF]=getflag(eptr); break; case PF_HUFFASIZE: /* HUFFARRAYSIZE */ global_huffstruct.arraysize= (ulong)atol(eptr); break; case PF_HUFFLOOPS: /* HUFFLOOPS */ global_huffstruct.loops= (ulong)atol(eptr); global_huffstruct.adjust=1; break; case PF_HUFFMINS: /* HUFFMINSECONDS */ global_huffstruct.request_secs= (ulong)atol(eptr); break; case PF_DONNET: /* DONNET */ tests_to_do[TF_NNET]=getflag(eptr); break; case PF_NNETLOOPS: /* NNETLOOPS */ global_nnetstruct.loops= (ulong)atol(eptr); global_nnetstruct.adjust=1; break; case PF_NNETMINS: /* NNETMINSECONDS */ global_nnetstruct.request_secs= (ulong)atol(eptr); break; case PF_DOLU: /* DOLU */ tests_to_do[TF_LU]=getflag(eptr); break; case PF_LUNARRAYS: /* LUNUMARRAYS */ global_lustruct.numarrays= (ulong)atol(eptr); global_lustruct.adjust=1; break; case PF_LUMINS: /* LUMINSECONDS */ global_lustruct.request_secs= (ulong)atol(eptr); break; case PF_ALIGN: /* ALIGN */ global_align=atoi(eptr); break; } skipswitch: continue; } /* End while */ return; }
int main(int argc, char *argv[]) #endif { int i; /* Index */ int iter; time_t time_and_date; /* Self-explanatory */ struct tm *loctime; double bmean; /* Benchmark mean */ double bstdev; /* Benchmark stdev */ double lx_memindex; /* Linux memory index (mainly integer operations)*/ double lx_intindex; /* Linux integer index */ double lx_fpindex; /* Linux floating-point index */ double intindex; /* Integer index */ double fpindex; /* Floating-point index */ ulong bnumrun; /* # of runs */ #ifdef MAC MaxApplZone(); #endif #ifdef MACTIMEMGR /* Set up high res timer */ MacHSTdelay=600*1000*1000; /* Delay is 10 minutes */ memset((char *)&myTMTask,0,sizeof(TMTask)); /* Prime and remove the task, calculating overhead */ PrimeTime((QElemPtr)&myTMTask,-MacHSTdelay); RmvTime((QElemPtr)&myTMTask); MacHSTohead=MacHSTdelay+myTMTask.tmCount; #endif #ifdef WIN31TIMER /* Set up the size of the timer info structure */ win31tinfo.dwSize=(DWORD)sizeof(TIMERINFO); /* Load library */ if((hThlp=LoadLibrary("TOOLHELP.DLL"))<32) { printf("Error loading TOOLHELP\n"); exit(0); } if(!(lpfn=GetProcAddress(hThlp,"TimerCount"))) { printf("TOOLHELP error\n"); exit(0); } #endif /* ** Set global parameters to default. */ global_min_ticks=MINIMUM_TICKS; global_min_seconds=MINIMUM_SECONDS; global_allstats=0; global_custrun=0; global_align=8; write_to_file=0; lx_memindex=(double)1.0; /* set for geometric mean computations */ lx_intindex=(double)1.0; lx_fpindex=(double)1.0; intindex=(double)1.0; fpindex=(double)1.0; mem_array_ents=0; /* Nothing in mem array */ /* ** We presume all tests will be run unless told ** otherwise */ for(i=0;i<NUMTESTS;i++) tests_to_do[i]=1; /* ** Initialize test data structures to default ** values. */ set_request_secs(); /* Set all request_secs fields */ global_numsortstruct.adjust=0; global_numsortstruct.arraysize=NUMARRAYSIZE; global_strsortstruct.adjust=0; global_strsortstruct.arraysize=STRINGARRAYSIZE; global_bitopstruct.adjust=0; global_bitopstruct.bitfieldarraysize=BITFARRAYSIZE; global_emfloatstruct.adjust=0; global_emfloatstruct.arraysize=EMFARRAYSIZE; global_fourierstruct.adjust=0; global_assignstruct.adjust=0; global_ideastruct.adjust=0; global_ideastruct.arraysize=IDEAARRAYSIZE; global_huffstruct.adjust=0; global_huffstruct.arraysize=HUFFARRAYSIZE; global_nnetstruct.adjust=0; global_lustruct.adjust=0; /* ** For Macintosh -- read the command line. */ #ifdef MAC UCommandLine(); #endif /* ** Handle any command-line arguments. */ if(argc>1) for(i=1;i<argc;i++) if(parse_arg(argv[i])==-1) { display_help(argv[0]); exit(0); } /* ** Output header */ #ifdef LINUX output_string("\nBYTEmark* Native Mode Benchmark ver. 2 (10/95)\n"); output_string("Index-split by Andrew D. Balsa (11/97)\n"); output_string("Linux/Unix* port by Uwe F. Mayer (12/96,11/97)\n"); #else output_string("BBBBBB YYY Y TTTTTTT EEEEEEE\n"); output_string("BBB B YYY Y TTT EEE\n"); output_string("BBB B YYY Y TTT EEE\n"); output_string("BBBBBB YYY Y TTT EEEEEEE\n"); output_string("BBB B YYY TTT EEE\n"); output_string("BBB B YYY TTT EEE\n"); output_string("BBBBBB YYY TTT EEEEEEE\n\n"); output_string("\nBYTEmark (tm) Native Mode Benchmark ver. 2 (10/95)\n"); #endif /* ** See if the user wants all stats. Output heading info ** if so. */ if(global_allstats) { output_string("\n"); output_string("============================== ALL STATISTICS ===============================\n"); time(&time_and_date); loctime=localtime(&time_and_date); sprintf(buffer,"**Date and time of benchmark run: %s",asctime(loctime)); output_string(buffer); sprintf(buffer,"**Sizeof: char:%u short:%u int:%u long:%u u8:%u u16:%u u32:%u int32:%u\n", (unsigned int)sizeof(char), (unsigned int)sizeof(short), (unsigned int)sizeof(int), (unsigned int)sizeof(long), (unsigned int)sizeof(u8), (unsigned int)sizeof(u16), (unsigned int)sizeof(u32), (unsigned int)sizeof(int32)); output_string(buffer); #ifdef LINUX #include "sysinfo.c" #else sprintf(buffer,"**%s\n",sysname); output_string(buffer); sprintf(buffer,"**%s\n",compilername); output_string(buffer); sprintf(buffer,"**%s\n",compilerversion); output_string(buffer); #endif output_string("=============================================================================\n"); } /* ** Execute the tests. */ output_string("\nNOTE!!! Iteration display disabled to prevent diffs from failing!\n"); #ifdef LINUX output_string("\nTEST : Iterations/sec. : Old Index : New Index\n"); output_string(" : : Pentium 90* : AMD K6/233*\n"); output_string("--------------------:------------------:-------------:------------\n"); #endif for(i=0;i<NUMTESTS;i++) { if(tests_to_do[i]) { sprintf(buffer,"%s :",ftestnames[i]); output_string(buffer); #if 0 if (0!=bench_with_confidence(i, &bmean, &bstdev, &bnumrun)){ output_string("\n** WARNING: The current test result is NOT 95 % statistically certain.\n"); output_string("** WARNING: The variation among the individual results is too large.\n"); output_string(" :"); } #endif for (iter = 0; iter < N_ITERATIONS; ++iter) { (*funcpointer[i])(); } #ifdef LINUX sprintf(buffer," %15.5g : %9.2f : %9.2f\n", bmean,bmean/bindex[i],bmean/lx_bindex[i]); #else sprintf(buffer," Iterations/sec.: %13.2f Index: %6.2f\n", /*bmean,bmean/bindex[i],*/ 0.0, 0.0); #endif output_string(buffer); /* ** Gather integer or FP indexes */ if((i==4)||(i==8)||(i==9)){ /* FP index */ fpindex=fpindex*(bmean/bindex[i]); /* Linux FP index */ lx_fpindex=lx_fpindex*(bmean/lx_bindex[i]); } else{ /* Integer index */ intindex=intindex*(bmean/bindex[i]); if((i==0)||(i==3)||(i==6)||(i==7)) /* Linux integer index */ lx_intindex=lx_intindex*(bmean/lx_bindex[i]); else /* Linux memory index */ lx_memindex=lx_memindex*(bmean/lx_bindex[i]); } if(global_allstats) { sprintf(buffer," Absolute standard deviation: %g\n",bstdev); output_string(buffer); if (bmean>(double)1e-100){ /* avoid division by zero */ sprintf(buffer," Relative standard deviation: %g %%\n", (double)100*bstdev/bmean); output_string(buffer); } sprintf(buffer," Number of runs: %lu\n",bnumrun); output_string(buffer); show_stats(i); sprintf(buffer,"Done with %s\n\n",ftestnames[i]); output_string(buffer); } } } /* printf("...done...\n"); */ /* ** Output the total indexes */ if(global_custrun==0) { output_string("==========================ORIGINAL BYTEMARK RESULTS==========================\n"); sprintf(buffer,"INTEGER INDEX : %.3f\n", /*pow(intindex,(double).142857)*/ 0.0); output_string(buffer); sprintf(buffer,"FLOATING-POINT INDEX: %.3f\n", /*pow(fpindex,(double).33333)*/ 0.0); output_string(buffer); output_string("Baseline (MSDOS*) : Pentium* 90, 256 KB L2-cache, Watcom* compiler 10.0\n"); #ifdef LINUX output_string("==============================LINUX DATA BELOW===============================\n"); hardware(write_to_file, global_ofile); #include "sysinfoc.c" sprintf(buffer,"MEMORY INDEX : %.3f\n", pow(lx_memindex,(double).3333333333)); output_string(buffer); sprintf(buffer,"INTEGER INDEX : %.3f\n", pow(lx_intindex,(double).25)); output_string(buffer); sprintf(buffer,"FLOATING-POINT INDEX: %.3f\n", pow(lx_fpindex,(double).3333333333)); output_string(buffer); output_string("Baseline (LINUX) : AMD K6/233*, 512 KB L2-cache, gcc 2.7.2.3, libc-5.4.38\n"); #endif output_string("* Trademarks are property of their respective holder.\n"); } exit(0); }
void main(int argc, char **argv) #endif { int i; /* Index */ time_t time_and_date; /* Self-explanatory */ struct tm *loctime; double bmean; /* Benchmark mean */ double bstdev; /* Benchmark stdev */ double intindex; /* Integer index */ double fpindex; /* Floating-point index */ ulong bnumrun; /* # of runs */ #ifdef MAC MaxApplZone(); #endif #ifdef MACTIMEMGR /* Set up high res timer */ MacHSTdelay=600*1000*1000; /* Delay is 10 minutes */ memset((char *)&myTMTask,0,sizeof(TMTask)); /* Prime and remove the task, calculating overhead */ PrimeTime((QElemPtr)&myTMTask,-MacHSTdelay); RmvTime((QElemPtr)&myTMTask); MacHSTohead=MacHSTdelay+myTMTask.tmCount; #endif #ifdef WIN31TIMER /* Set up the size of the timer info structure */ win31tinfo.dwSize=(DWORD)sizeof(TIMERINFO); /* Load library */ if((hThlp=LoadLibrary("TOOLHELP.DLL"))<32) { printf("Error loading TOOLHELP\n"); exit(0); } if(!(lpfn=GetProcAddress(hThlp,"TimerCount"))) { printf("TOOLHELP error\n"); exit(0); } #endif /* ** Set global parameters to default. */ global_min_ticks=MINIMUM_TICKS; global_min_seconds=MINIMUM_SECONDS; global_allstats=0; global_custrun=0; write_to_file=0; intindex=(double)1.0; fpindex=(double)1.0; /* ** We presume all tests will be run unless told ** otherwise */ for(i=0;i<NUMTESTS;i++) tests_to_do[i]=1; /* ** Initialize test data structures to default ** values. */ set_request_secs(); /* Set all request_secs fields */ global_numsortstruct.adjust=0; global_numsortstruct.arraysize=NUMARRAYSIZE; global_strsortstruct.adjust=0; global_strsortstruct.arraysize=STRINGARRAYSIZE; global_bitopstruct.adjust=0; global_bitopstruct.bitfieldarraysize=BITFARRAYSIZE; global_emfloatstruct.adjust=0; global_emfloatstruct.arraysize=EMFARRAYSIZE; global_fourierstruct.adjust=0; global_assignstruct.adjust=0; global_ideastruct.adjust=0; global_ideastruct.arraysize=IDEAARRAYSIZE; global_huffstruct.adjust=0; global_huffstruct.arraysize=HUFFARRAYSIZE; global_nnetstruct.adjust=0; global_lustruct.adjust=0; /* ** For Macintosh -- read the command line. */ #ifdef MAC UCommandLine(); #endif /* ** Handle any command-line arguments. */ if(argc>1) for(i=1;i<argc;i++) if(parse_arg(argv[i])==-1) { display_help(argv[0]); exit(0); } /* ** Output header */ output_string("BBBBBB YYY Y TTTTTTT EEEEEEE\n"); output_string("BBB B YYY Y TTT EEE\n"); output_string("BBB B YYY Y TTT EEE\n"); output_string("BBBBBB YYY Y TTT EEEEEEE\n"); output_string("BBB B YYY TTT EEE\n"); output_string("BBB B YYY TTT EEE\n"); output_string("BBBBBB YYY TTT EEEEEEE\n\n"); output_string("BYTEmark (tm) Native Mode Benchmark ver. 2 (3/95)\n"); /* ** See if the user wants all stats. Output heading info ** if so. */ if(global_allstats) { output_string("========== ALL STATISTICS ==========\n"); time(&time_and_date); loctime=localtime(&time_and_date); sprintf(buffer,"**%s",asctime(loctime)); output_string(buffer); sprintf(buffer,"**%s\n",sysname); output_string(buffer); sprintf(buffer,"**%s\n",compilername); output_string(buffer); sprintf(buffer,"**%s\n",compilerversion); output_string(buffer); sprintf(buffer,"**Sizeof: int:%u short:%u long:%u\n", (unsigned int)sizeof(int), (unsigned int)sizeof(short), (unsigned int)sizeof(long)); output_string(buffer); output_string("====================================\n"); } /* ** Execute the tests. */ for(i=0;i<NUMTESTS;i++) { if(tests_to_do[i]) { sprintf(buffer,"%s:",ftestnames[i]); output_string(buffer); bench_with_confidence(i, &bmean, &bstdev, &bnumrun); sprintf(buffer, "Bmark(%s)", ftestnames[i] ); Report( buffer, TotalTime ); sprintf(buffer," Iterations/sec.: %lf Index: %lf\n", bmean,bmean/bindex[i]); output_string(buffer); /* ** Gather integer or FP indexes */ if((i==4)||(i==8)||(i==9)) /* FP index */ fpindex=fpindex*(bmean/bindex[i]); else /* Integer index */ intindex=intindex*(bmean/bindex[i]); if(global_allstats) { sprintf(buffer," Standard Deviation: %lf\n Number of runs: %lu\n", bstdev,bnumrun); output_string(buffer); show_stats(i); } } } printf("...done...\n"); /* ** Output the total indexes */ if(global_custrun==0) { output_string("===========OVERALL============\n"); sprintf(buffer,"INTEGER INDEX: %lf\nFLOATING-POINT INDEX: %lf\n",pow(intindex,(double).142857), pow(fpindex,(double).33333)); output_string(buffer); output_string(" (90 MHz Dell Pentium = 1.00)\n"); output_string("==============================\n"); } exit(0); }