09a53ad8f1
Sponsored by: The FreeBSD Foundation
312 lines
11 KiB
C
312 lines
11 KiB
C
/*
|
|
**************************************************************************
|
|
* DHRYSTONE 2.1 BENCHMARK PC VERSION
|
|
**************************************************************************
|
|
*
|
|
* "DHRYSTONE" Benchmark Program
|
|
* -----------------------------
|
|
*
|
|
* Version: C, Version 2.1
|
|
*
|
|
* File: dhry.h (part 1 of 3)
|
|
*
|
|
* Date: May 25, 1988
|
|
*
|
|
* Author: Reinhold P. Weicker
|
|
* Siemens AG, AUT E 51
|
|
* Postfach 3220
|
|
* 8520 Erlangen
|
|
* Germany (West)
|
|
* Phone: [+49]-9131-7-20330
|
|
* (8-17 Central European Time)
|
|
* Usenet: ..!mcsun!unido!estevax!weicker
|
|
*
|
|
* Original Version (in Ada) published in
|
|
* "Communications of the ACM" vol. 27., no. 10 (Oct. 1984),
|
|
* pp. 1013 - 1030, together with the statistics
|
|
* on which the distribution of statements etc. is based.
|
|
*
|
|
* In this C version, the following C library functions are used:
|
|
* - strcpy, strcmp (inside the measurement loop)
|
|
* - printf, scanf (outside the measurement loop)
|
|
* In addition, Berkeley UNIX system calls "times ()" or "time ()"
|
|
* are used for execution time measurement. For measurements
|
|
* on other systems, these calls have to be changed.
|
|
*
|
|
* Collection of Results:
|
|
* Reinhold Weicker (address see above) and
|
|
*
|
|
* Rick Richardson
|
|
* PC Research. Inc.
|
|
* 94 Apple Orchard Drive
|
|
* Tinton Falls, NJ 07724
|
|
* Phone: (201) 389-8963 (9-17 EST)
|
|
* Usenet: ...!uunet!pcrat!rick
|
|
*
|
|
* Please send results to Rick Richardson and/or Reinhold Weicker.
|
|
* Complete information should be given on hardware and software used.
|
|
* Hardware information includes: Machine type, CPU, type and size
|
|
* of caches; for microprocessors: clock frequency, memory speed
|
|
* (number of wait states).
|
|
* Software information includes: Compiler (and runtime library)
|
|
* manufacturer and version, compilation switches, OS version.
|
|
* The Operating System version may give an indication about the
|
|
* compiler; Dhrystone itself performs no OS calls in the measurement
|
|
* loop.
|
|
*
|
|
* The complete output generated by the program should be mailed
|
|
* such that at least some checks for correctness can be made.
|
|
*
|
|
**************************************************************************
|
|
*
|
|
* This version has changes made by Roy Longbottom to conform to a common
|
|
* format for a series of standard benchmarks for PCs:
|
|
*
|
|
* Running time greater than 5 seconds due to inaccuracy of the PC clock.
|
|
*
|
|
* Automatic adjustment of run time, no manually inserted parameters.
|
|
*
|
|
* Initial display of calibration times to confirm linearity.
|
|
*
|
|
* Display of results within one screen (or at a slow speed as the test
|
|
* progresses) so that it can be seen to have run successfully.
|
|
*
|
|
* Facilities to type in details of system used etc.
|
|
*
|
|
* All results and details appended to a results file.
|
|
*
|
|
*
|
|
* Roy Longbottom
|
|
* 101323.2241@compuserve.com
|
|
*
|
|
**************************************************************************
|
|
*
|
|
* For details of history, changes, other defines, benchmark construction
|
|
* statistics see official versions from ftp.nosc.mil/pub/aburto where
|
|
* the latest table of results (dhry.tbl) are available. See also
|
|
* netlib@ornl.gov
|
|
*
|
|
**************************************************************************
|
|
*
|
|
* Defines: The following "Defines" are possible:
|
|
* -DREG=register (default: Not defined)
|
|
* As an approximation to what an average C programmer
|
|
* might do, the "register" storage class is applied
|
|
* (if enabled by -DREG=register)
|
|
* - for local variables, if they are used (dynamically)
|
|
* five or more times
|
|
* - for parameters if they are used (dynamically)
|
|
* six or more times
|
|
* Note that an optimal "register" strategy is
|
|
* compiler-dependent, and that "register" declarations
|
|
* do not necessarily lead to faster execution.
|
|
* -DNOSTRUCTASSIGN (default: Not defined)
|
|
* Define if the C compiler does not support
|
|
* assignment of structures.
|
|
* -DNOENUMS (default: Not defined)
|
|
* Define if the C compiler does not support
|
|
* enumeration types.
|
|
***************************************************************************
|
|
*
|
|
* Compilation model and measurement (IMPORTANT):
|
|
*
|
|
* This C version of Dhrystone consists of three files:
|
|
* - dhry.h (this file, containing global definitions and comments)
|
|
* - dhry_1.c (containing the code corresponding to Ada package Pack_1)
|
|
* - dhry_2.c (containing the code corresponding to Ada package Pack_2)
|
|
*
|
|
* The following "ground rules" apply for measurements:
|
|
* - Separate compilation
|
|
* - No procedure merging
|
|
* - Otherwise, compiler optimizations are allowed but should be indicated
|
|
* - Default results are those without register declarations
|
|
* See the companion paper "Rationale for Dhrystone Version 2" for a more
|
|
* detailed discussion of these ground rules.
|
|
*
|
|
* For 16-Bit processors (e.g. 80186, 80286), times for all compilation
|
|
* models ("small", "medium", "large" etc.) should be given if possible,
|
|
* together with a definition of these models for the compiler system used.
|
|
*
|
|
**************************************************************************
|
|
* Examples of Pentium Results
|
|
*
|
|
* Dhrystone Benchmark Version 2.1 (Language: C)
|
|
*
|
|
* Month run 4/1996
|
|
* PC model Escom
|
|
* CPU Pentium
|
|
* Clock MHz 100
|
|
* Cache 256K
|
|
* Options Neptune chipset
|
|
* OS/DOS Windows 95
|
|
* Compiler Watcom C/ C++ 10.5 Win386
|
|
* OptLevel -otexan -zp8 -fp5 -5r
|
|
* Run by Roy Longbottom
|
|
* From UK
|
|
* Mail 101323.2241@compuserve.com
|
|
*
|
|
* Final values (* implementation-dependent):
|
|
*
|
|
* Int_Glob: O.K. 5
|
|
* Bool_Glob: O.K. 1
|
|
* Ch_1_Glob: O.K. A
|
|
* Ch_2_Glob: O.K. B
|
|
* Arr_1_Glob[8]: O.K. 7
|
|
* Arr_2_Glob8/7: O.K. 1600010
|
|
* Ptr_Glob->
|
|
* Ptr_Comp: * 98008
|
|
* Discr: O.K. 0
|
|
* Enum_Comp: O.K. 2
|
|
* Int_Comp: O.K. 17
|
|
* Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
|
|
* Next_Ptr_Glob->
|
|
* Ptr_Comp: * 98008 same as above
|
|
* Discr: O.K. 0
|
|
* Enum_Comp: O.K. 1
|
|
* Int_Comp: O.K. 18
|
|
* Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
|
|
* Int_1_Loc: O.K. 5
|
|
* Int_2_Loc: O.K. 13
|
|
* Int_3_Loc: O.K. 7
|
|
* Enum_Loc: O.K. 1
|
|
* Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING
|
|
* Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING
|
|
*
|
|
* Register option Selected.
|
|
*
|
|
* Microseconds 1 loop: 4.53
|
|
* Dhrystones / second: 220690
|
|
* VAX MIPS rating: 125.61
|
|
*
|
|
*
|
|
* Dhrystone Benchmark Version 2.1 (Language: C)
|
|
*
|
|
* Month run 4/1996
|
|
* PC model Escom
|
|
* CPU Pentium
|
|
* Clock MHz 100
|
|
* Cache 256K
|
|
* Options Neptune chipset
|
|
* OS/DOS Windows 95
|
|
* Compiler Watcom C/ C++ 10.5 Win386
|
|
* OptLevel No optimisation
|
|
* Run by Roy Longbottom
|
|
* From UK
|
|
* Mail 101323.2241@compuserve.com
|
|
*
|
|
* Final values (* implementation-dependent):
|
|
*
|
|
* Int_Glob: O.K. 5
|
|
* Bool_Glob: O.K. 1
|
|
* Ch_1_Glob: O.K. A
|
|
* Ch_2_Glob: O.K. B
|
|
* Arr_1_Glob[8]: O.K. 7
|
|
* Arr_2_Glob8/7: O.K. 320010
|
|
* Ptr_Glob->
|
|
* Ptr_Comp: * 98004
|
|
* Discr: O.K. 0
|
|
* Enum_Comp: O.K. 2
|
|
* Int_Comp: O.K. 17
|
|
* Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
|
|
* Next_Ptr_Glob->
|
|
* Ptr_Comp: * 98004 same as above
|
|
* Discr: O.K. 0
|
|
* Enum_Comp: O.K. 1
|
|
* Int_Comp: O.K. 18
|
|
* Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING
|
|
* Int_1_Loc: O.K. 5
|
|
* Int_2_Loc: O.K. 13
|
|
* Int_3_Loc: O.K. 7
|
|
* Enum_Loc: O.K. 1
|
|
* Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING
|
|
* Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING
|
|
*
|
|
* Register option Not selected.
|
|
*
|
|
* Microseconds 1 loop: 20.06
|
|
* Dhrystones / second: 49844
|
|
* VAX MIPS rating: 28.37
|
|
*
|
|
**************************************************************************
|
|
*/
|
|
|
|
/* Compiler and system dependent definitions: */
|
|
|
|
#ifndef TIME
|
|
#define TIMES
|
|
#endif
|
|
/* Use times(2) time function unless */
|
|
/* explicitly defined otherwise */
|
|
|
|
#ifdef TIMES
|
|
/* #include <sys/types.h>
|
|
#include <sys/times.h> */
|
|
/* for "times" */
|
|
#endif
|
|
|
|
#define Mic_secs_Per_Second 1000000.0
|
|
/* Berkeley UNIX C returns process times in seconds/HZ */
|
|
|
|
#ifdef NOSTRUCTASSIGN
|
|
#define structassign(d, s) memcpy(&(d), &(s), sizeof(d))
|
|
#else
|
|
#define structassign(d, s) d = s
|
|
#endif
|
|
|
|
#ifdef NOENUM
|
|
#define Ident_1 0
|
|
#define Ident_2 1
|
|
#define Ident_3 2
|
|
#define Ident_4 3
|
|
#define Ident_5 4
|
|
typedef int Enumeration;
|
|
#else
|
|
typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5}
|
|
Enumeration;
|
|
#endif
|
|
/* for boolean and enumeration types in Ada, Pascal */
|
|
|
|
/* General definitions: */
|
|
|
|
#include <stdio.h>
|
|
#include <string.h>
|
|
|
|
/* for strcpy, strcmp */
|
|
|
|
#define Null 0
|
|
/* Value of a Null pointer */
|
|
#define true 1
|
|
#define false 0
|
|
|
|
typedef int One_Thirty;
|
|
typedef int One_Fifty;
|
|
typedef char Capital_Letter;
|
|
typedef int Boolean;
|
|
typedef char Str_30 [31];
|
|
typedef int Arr_1_Dim [50];
|
|
typedef int Arr_2_Dim [50] [50];
|
|
|
|
typedef struct record
|
|
{
|
|
struct record *Ptr_Comp;
|
|
Enumeration Discr;
|
|
union {
|
|
struct {
|
|
Enumeration Enum_Comp;
|
|
int Int_Comp;
|
|
char Str_Comp [31];
|
|
} var_1;
|
|
struct {
|
|
Enumeration E_Comp_2;
|
|
char Str_2_Comp [31];
|
|
} var_2;
|
|
struct {
|
|
char Ch_1_Comp;
|
|
char Ch_2_Comp;
|
|
} var_3;
|
|
} variant;
|
|
} Rec_Type, *Rec_Pointer;
|
|
|
|
|
|
|