mirror of
https://github.com/apache/cloudstack.git
synced 2025-12-21 21:13:53 +01:00
357 lines
10 KiB
C
357 lines
10 KiB
C
/*
|
|
** nbench0.h
|
|
** Header for nbench0.c
|
|
** BYTEmark (tm)
|
|
** BYTE's Native Mode Benchmarks
|
|
** Rick Grehan, BYTE Magazine
|
|
**
|
|
** Creation:
|
|
** Revision: 3/95;10/95
|
|
** 10/95 - Added memory array & alignment -- RG
|
|
**
|
|
** DISCLAIMER
|
|
** The source, executable, and documentation files that comprise
|
|
** the BYTEmark benchmarks are made available on an "as is" basis.
|
|
** This means that we at BYTE Magazine have made every reasonable
|
|
** effort to verify that the there are no errors in the source and
|
|
** executable code. We cannot, however, guarantee that the programs
|
|
** are error-free. Consequently, McGraw-HIll and BYTE Magazine make
|
|
** no claims in regard to the fitness of the source code, executable
|
|
** code, and documentation of the BYTEmark.
|
|
** Furthermore, BYTE Magazine, McGraw-Hill, and all employees
|
|
** of McGraw-Hill cannot be held responsible for any damages resulting
|
|
** from the use of this code or the results obtained from using
|
|
** this code.
|
|
*/
|
|
|
|
/*
|
|
** Following should be modified accordingly per each
|
|
** compilation.
|
|
*/
|
|
char *sysname="You can enter your system description in nbench0.h";
|
|
char *compilername="It then will be printed here after you recompile";
|
|
char *compilerversion="Have a nice day";
|
|
|
|
/* Parameter flags. Must coincide with parameter names array
|
|
** which appears below. */
|
|
#define PF_GMTICKS 0 /* GLOBALMINTICKS */
|
|
#define PF_MINSECONDS 1 /* MINSECONDS */
|
|
#define PF_ALLSTATS 2 /* ALLSTATS */
|
|
#define PF_OUTFILE 3 /* OUTFILE */
|
|
#define PF_CUSTOMRUN 4 /* CUSTOMRUN */
|
|
#define PF_DONUM 5 /* DONUMSORT */
|
|
#define PF_NUMNUMA 6 /* NUMNUMARRAYS */
|
|
#define PF_NUMASIZE 7 /* NUMARRAYSIZE */
|
|
#define PF_NUMMINS 8 /* NUMMINSECONDS */
|
|
#define PF_DOSTR 9 /* DOSTRINGSORT */
|
|
#define PF_STRASIZE 10 /* STRARRAYSIZE */
|
|
#define PF_NUMSTRA 11 /* NUMSTRARRAYS */
|
|
#define PF_STRMINS 12 /* STRMINSECONDS */
|
|
#define PF_DOBITF 13 /* DOBITFIELD */
|
|
#define PF_NUMBITOPS 14 /* NUMBITOPS */
|
|
#define PF_BITFSIZE 15 /* BITFIELDSIZE */
|
|
#define PF_BITMINS 16 /* BITMINSECONDS */
|
|
#define PF_DOEMF 17 /* DOEMF */
|
|
#define PF_EMFASIZE 18 /* EMFARRAYSIZE */
|
|
#define PF_EMFLOOPS 19 /* EMFLOOPS */
|
|
#define PF_EMFMINS 20 /* EMFMINSECOND */
|
|
#define PF_DOFOUR 21 /* DOFOUR */
|
|
#define PF_FOURASIZE 22 /* FOURASIZE */
|
|
#define PF_FOURMINS 23 /* FOURMINSECONDS */
|
|
#define PF_DOASSIGN 24 /* DOASSIGN */
|
|
#define PF_AARRAYS 25 /* ASSIGNARRAYS */
|
|
#define PF_ASSIGNMINS 26 /* ASSIGNMINSECONDS */
|
|
#define PF_DOIDEA 27 /* DOIDEA */
|
|
#define PF_IDEAASIZE 28 /* IDEAARRAYSIZE */
|
|
#define PF_IDEALOOPS 29 /* IDEALOOPS */
|
|
#define PF_IDEAMINS 30 /* IDEAMINSECONDS */
|
|
#define PF_DOHUFF 31 /* DOHUFF */
|
|
#define PF_HUFFASIZE 32 /* HUFFARRAYSIZE */
|
|
#define PF_HUFFLOOPS 33 /* HUFFLOOPS */
|
|
#define PF_HUFFMINS 34 /* HUFFMINSECONDS */
|
|
#define PF_DONNET 35 /* DONNET */
|
|
#define PF_NNETLOOPS 36 /* NNETLOOPS */
|
|
#define PF_NNETMINS 37 /* NNETMINSECONDS */
|
|
#define PF_DOLU 38 /* DOLU */
|
|
#define PF_LUNARRAYS 39 /* LUNUMARRAYS */
|
|
#define PF_LUMINS 40 /* LUMINSECONDS */
|
|
#define PF_ALIGN 41 /* ALIGN */
|
|
|
|
#define MAXPARAM 41
|
|
|
|
/* Tests-to-do flags...must coincide with test. */
|
|
#define TF_NUMSORT 0
|
|
#define TF_SSORT 1
|
|
#define TF_BITOP 2
|
|
#define TF_FPEMU 3
|
|
#define TF_FFPU 4
|
|
#define TF_ASSIGN 5
|
|
#define TF_IDEA 6
|
|
#define TF_HUFF 7
|
|
#define TF_NNET 8
|
|
#define TF_LU 9
|
|
|
|
#define NUMTESTS 10
|
|
|
|
/*
|
|
** GLOBALS
|
|
*/
|
|
|
|
#define BUF_SIZ 1024
|
|
|
|
/*
|
|
** Test names
|
|
*/
|
|
char *ftestnames[] = {
|
|
"NUMERIC SORT ",
|
|
"STRING SORT ",
|
|
"BITFIELD ",
|
|
"FP EMULATION ",
|
|
"FOURIER ",
|
|
"ASSIGNMENT ",
|
|
"IDEA ",
|
|
"HUFFMAN ",
|
|
"NEURAL NET ",
|
|
"LU DECOMPOSITION" };
|
|
|
|
/*
|
|
** Indexes -- Baseline is DELL Pentium XP90
|
|
** 11/28/94
|
|
*/
|
|
double bindex[] = {
|
|
38.993, /* Numeric sort */
|
|
2.238, /* String sort */
|
|
5829704, /* Bitfield */
|
|
2.084, /* FP Emulation */
|
|
879.278, /* Fourier */
|
|
.2628, /* Assignment */
|
|
65.382, /* IDEA */
|
|
36.062, /* Huffman */
|
|
.6225, /* Neural Net */
|
|
19.3031 }; /* LU Decomposition */
|
|
|
|
/*
|
|
** Indices -- Baseline is a AMD K6-233, 32MB RAM (60ns SDRAM),512k L2 cache,
|
|
** Linux kernel 2.0.32, libc-5.4.38, gcc-2.7.2.3)
|
|
** Nov/30/97
|
|
*/
|
|
double lx_bindex[] = {
|
|
118.73, /* Numeric sort */
|
|
14.459, /* String sort */
|
|
27910000, /* Bitfield */
|
|
9.0314, /* FP Emulation */
|
|
1565.5, /* Fourier */
|
|
1.0132, /* Assignment */
|
|
220.21, /* IDEA */
|
|
112.93, /* Huffman */
|
|
1.4799, /* Neural Net */
|
|
26.732}; /* LU Decomposition */
|
|
|
|
/* Parameter names */
|
|
char *paramnames[]= {
|
|
"GLOBALMINTICKS",
|
|
"MINSECONDS",
|
|
"ALLSTATS",
|
|
"OUTFILE",
|
|
"CUSTOMRUN",
|
|
"DONUMSORT",
|
|
"NUMNUMARRAYS",
|
|
"NUMARRAYSIZE",
|
|
"NUMMINSECONDS",
|
|
"DOSTRINGSORT",
|
|
"STRARRAYSIZE",
|
|
"NUMSTRARRAYS",
|
|
"STRMINSECONDS",
|
|
"DOBITFIELD",
|
|
"NUMBITOPS",
|
|
"BITFIELDSIZE",
|
|
"BITMINSECONDS",
|
|
"DOEMF",
|
|
"EMFARRAYSIZE",
|
|
"EMFLOOPS",
|
|
"EMFMINSECONDS",
|
|
"DOFOUR",
|
|
"FOURSIZE",
|
|
"FOURMINSECONDS",
|
|
"DOASSIGN",
|
|
"ASSIGNARRAYS",
|
|
"ASSIGNMINSECONDS",
|
|
"DOIDEA",
|
|
"IDEARRAYSIZE",
|
|
"IDEALOOPS",
|
|
"IDEAMINSECONDS",
|
|
"DOHUFF",
|
|
"HUFARRAYSIZE",
|
|
"HUFFLOOPS",
|
|
"HUFFMINSECONDS",
|
|
"DONNET",
|
|
"NNETLOOPS",
|
|
"NNETMINSECONDS",
|
|
"DOLU",
|
|
"LUNUMARRAYS",
|
|
"LUMINSECONDS",
|
|
"ALIGN" };
|
|
|
|
/*
|
|
** Following array is a collection of flags indicating which
|
|
** tests to perform.
|
|
*/
|
|
int tests_to_do[NUMTESTS];
|
|
|
|
/*
|
|
** Buffer for holding output text.
|
|
*/
|
|
char buffer[BUF_SIZ];
|
|
|
|
/*
|
|
** Global parameters.
|
|
*/
|
|
ulong global_min_ticks; /* Minimum ticks */
|
|
ulong global_min_seconds; /* Minimum seconds tests run */
|
|
int global_allstats; /* Statistics dump flag */
|
|
char global_ofile_name[BUF_SIZ];/* Output file name */
|
|
FILE *global_ofile; /* Output file */
|
|
int global_custrun; /* Custom run flag */
|
|
int write_to_file; /* Write output to file */
|
|
int global_align; /* Memory alignment */
|
|
|
|
/*
|
|
** Following global is the memory array. This is used to store
|
|
** original and aligned (modified) memory addresses.
|
|
*/
|
|
ulong mem_array[2][MEM_ARRAY_SIZE];
|
|
int mem_array_ents; /* # of active entries */
|
|
|
|
/*
|
|
** Following are global structures, one built for
|
|
** each of the tests.
|
|
*/
|
|
SortStruct global_numsortstruct; /* For numeric sort */
|
|
SortStruct global_strsortstruct; /* For string sort */
|
|
BitOpStruct global_bitopstruct; /* For bitfield operations */
|
|
EmFloatStruct global_emfloatstruct; /* For emul. float. point */
|
|
FourierStruct global_fourierstruct; /* For fourier test */
|
|
AssignStruct global_assignstruct; /* For assignment algorithm */
|
|
IDEAStruct global_ideastruct; /* For IDEA encryption */
|
|
HuffStruct global_huffstruct; /* For Huffman compression */
|
|
NNetStruct global_nnetstruct; /* For Neural Net */
|
|
LUStruct global_lustruct; /* For LU decomposition */
|
|
|
|
/*
|
|
** The following array of function struct pointers lets
|
|
** us very rapidly map a function to its controlling
|
|
** data structure. NOTE: These must match the "TF_xxx"
|
|
** constants above.
|
|
*/
|
|
void *global_fstruct[] =
|
|
{ (void *)&global_numsortstruct,
|
|
(void *)&global_strsortstruct,
|
|
(void *)&global_bitopstruct,
|
|
(void *)&global_emfloatstruct,
|
|
(void *)&global_fourierstruct,
|
|
(void *)&global_assignstruct,
|
|
(void *)&global_ideastruct,
|
|
(void *)&global_huffstruct,
|
|
(void *)&global_nnetstruct,
|
|
(void *)&global_lustruct };
|
|
|
|
/*
|
|
** Following globals added to support command line emulation on
|
|
** the Macintosh....which doesn't have command lines.
|
|
*/
|
|
#ifdef MAC
|
|
int argc; /* Argument count */
|
|
char *argv[20]; /* Argument vectors */
|
|
|
|
unsigned char Uargbuff[129]; /* Buffer holding arguments string */
|
|
unsigned char Udummy[2]; /* Dummy buffer for first arg */
|
|
|
|
#endif
|
|
|
|
#ifdef MACTIMEMGR
|
|
#include <Types.h>
|
|
#include <Timer.h>
|
|
/*
|
|
** Timer globals for Mac
|
|
*/
|
|
struct TMTask myTMTask;
|
|
long MacHSTdelay,MacHSTohead;
|
|
|
|
#endif
|
|
|
|
/*
|
|
** Following globals used by Win 31 timing routines.
|
|
** NOTE: This requires the includes of the w31timer.asm
|
|
** file in your project!!
|
|
*/
|
|
#ifdef WIN31TIMER
|
|
#include <windows.h>
|
|
#include <toolhelp.h>
|
|
extern TIMERINFO win31tinfo;
|
|
extern HANDLE hThlp;
|
|
extern FARPROC lpfn;
|
|
#endif
|
|
|
|
/*
|
|
** PROTOTYPES
|
|
*/
|
|
static int parse_arg(char *argptr);
|
|
static void display_help(char *progname);
|
|
static void read_comfile(FILE *cfile);
|
|
static int getflag(char *cptr);
|
|
static void strtoupper(char *s);
|
|
static void set_request_secs(void);
|
|
static int bench_with_confidence(int fid,
|
|
double *mean, double *stdev, ulong *numtries);
|
|
/*
|
|
static int seek_confidence(double scores[5],
|
|
double *newscore, double *c_half_interval,
|
|
double *smean,double *sdev);
|
|
*/
|
|
static int calc_confidence(double scores[],
|
|
int num_scores,
|
|
double *c_half_interval,double *smean,
|
|
double *sdev);
|
|
static double getscore(int fid);
|
|
static void output_string(char *buffer);
|
|
static void show_stats(int bid);
|
|
|
|
#ifdef MAC
|
|
void UCommandLine(void);
|
|
void UParse(void);
|
|
unsigned char *UField(unsigned char *ptr);
|
|
#endif
|
|
|
|
/*
|
|
** EXTERNAL PROTOTYPES
|
|
*/
|
|
extern void DoNumSort(void); /* From NBENCH1 */
|
|
extern void DoStringSort(void);
|
|
extern void DoBitops(void);
|
|
extern void DoEmFloat(void);
|
|
extern void DoFourier(void);
|
|
extern void DoAssign(void);
|
|
extern void DoIDEA(void);
|
|
extern void DoHuffman(void);
|
|
extern void DoNNET(void);
|
|
extern void DoLU(void);
|
|
|
|
extern void ErrorExit(void); /* From SYSSPEC */
|
|
|
|
/*
|
|
** Array of pointers to the benchmark functions.
|
|
*/
|
|
void (*funcpointer[])(void) =
|
|
{ DoNumSort,
|
|
DoStringSort,
|
|
DoBitops,
|
|
DoEmFloat,
|
|
DoFourier,
|
|
DoAssign,
|
|
DoIDEA,
|
|
DoHuffman,
|
|
DoNNET,
|
|
DoLU };
|
|
|
|
|