/* ************************************************************************** * 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 #include */ /* 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 #include /* 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;