1 /* 2 ************************************************************************** 3 * DHRYSTONE 2.1 BENCHMARK PC VERSION 4 ************************************************************************** 5 * 6 * "DHRYSTONE" Benchmark Program 7 * ----------------------------- 8 * 9 * Version: C, Version 2.1 10 * 11 * File: dhry.h (part 1 of 3) 12 * 13 * Date: May 25, 1988 14 * 15 * Author: Reinhold P. Weicker 16 * Siemens AG, AUT E 51 17 * Postfach 3220 18 * 8520 Erlangen 19 * Germany (West) 20 * Phone: [+49]-9131-7-20330 21 * (8-17 Central European Time) 22 * Usenet: ..!mcsun!unido!estevax!weicker 23 * 24 * Original Version (in Ada) published in 25 * "Communications of the ACM" vol. 27., no. 10 (Oct. 1984), 26 * pp. 1013 - 1030, together with the statistics 27 * on which the distribution of statements etc. is based. 28 * 29 * In this C version, the following C library functions are used: 30 * - strcpy, strcmp (inside the measurement loop) 31 * - printf, scanf (outside the measurement loop) 32 * In addition, Berkeley UNIX system calls "times ()" or "time ()" 33 * are used for execution time measurement. For measurements 34 * on other systems, these calls have to be changed. 35 * 36 * Collection of Results: 37 * Reinhold Weicker (address see above) and 38 * 39 * Rick Richardson 40 * PC Research. Inc. 41 * 94 Apple Orchard Drive 42 * Tinton Falls, NJ 07724 43 * Phone: (201) 389-8963 (9-17 EST) 44 * Usenet: ...!uunet!pcrat!rick 45 * 46 * Please send results to Rick Richardson and/or Reinhold Weicker. 47 * Complete information should be given on hardware and software used. 48 * Hardware information includes: Machine type, CPU, type and size 49 * of caches; for microprocessors: clock frequency, memory speed 50 * (number of wait states). 51 * Software information includes: Compiler (and runtime library) 52 * manufacturer and version, compilation switches, OS version. 53 * The Operating System version may give an indication about the 54 * compiler; Dhrystone itself performs no OS calls in the measurement 55 * loop. 56 * 57 * The complete output generated by the program should be mailed 58 * such that at least some checks for correctness can be made. 59 * 60 ************************************************************************** 61 * 62 * This version has changes made by Roy Longbottom to conform to a common 63 * format for a series of standard benchmarks for PCs: 64 * 65 * Running time greater than 5 seconds due to inaccuracy of the PC clock. 66 * 67 * Automatic adjustment of run time, no manually inserted parameters. 68 * 69 * Initial display of calibration times to confirm linearity. 70 * 71 * Display of results within one screen (or at a slow speed as the test 72 * progresses) so that it can be seen to have run successfully. 73 * 74 * Facilities to type in details of system used etc. 75 * 76 * All results and details appended to a results file. 77 * 78 * 79 * Roy Longbottom 80 * 101323.2241@compuserve.com 81 * 82 ************************************************************************** 83 * 84 * For details of history, changes, other defines, benchmark construction 85 * statistics see official versions from ftp.nosc.mil/pub/aburto where 86 * the latest table of results (dhry.tbl) are available. See also 87 * netlib@ornl.gov 88 * 89 ************************************************************************** 90 * 91 * Defines: The following "Defines" are possible: 92 * -DREG=register (default: Not defined) 93 * As an approximation to what an average C programmer 94 * might do, the "register" storage class is applied 95 * (if enabled by -DREG=register) 96 * - for local variables, if they are used (dynamically) 97 * five or more times 98 * - for parameters if they are used (dynamically) 99 * six or more times 100 * Note that an optimal "register" strategy is 101 * compiler-dependent, and that "register" declarations 102 * do not necessarily lead to faster execution. 103 * -DNOSTRUCTASSIGN (default: Not defined) 104 * Define if the C compiler does not support 105 * assignment of structures. 106 * -DNOENUMS (default: Not defined) 107 * Define if the C compiler does not support 108 * enumeration types. 109 *************************************************************************** 110 * 111 * Compilation model and measurement (IMPORTANT): 112 * 113 * This C version of Dhrystone consists of three files: 114 * - dhry.h (this file, containing global definitions and comments) 115 * - dhry_1.c (containing the code corresponding to Ada package Pack_1) 116 * - dhry_2.c (containing the code corresponding to Ada package Pack_2) 117 * 118 * The following "ground rules" apply for measurements: 119 * - Separate compilation 120 * - No procedure merging 121 * - Otherwise, compiler optimizations are allowed but should be indicated 122 * - Default results are those without register declarations 123 * See the companion paper "Rationale for Dhrystone Version 2" for a more 124 * detailed discussion of these ground rules. 125 * 126 * For 16-Bit processors (e.g. 80186, 80286), times for all compilation 127 * models ("small", "medium", "large" etc.) should be given if possible, 128 * together with a definition of these models for the compiler system used. 129 * 130 ************************************************************************** 131 * Examples of Pentium Results 132 * 133 * Dhrystone Benchmark Version 2.1 (Language: C) 134 * 135 * Month run 4/1996 136 * PC model Escom 137 * CPU Pentium 138 * Clock MHz 100 139 * Cache 256K 140 * Options Neptune chipset 141 * OS/DOS Windows 95 142 * Compiler Watcom C/ C++ 10.5 Win386 143 * OptLevel -otexan -zp8 -fp5 -5r 144 * Run by Roy Longbottom 145 * From UK 146 * Mail 101323.2241@compuserve.com 147 * 148 * Final values (* implementation-dependent): 149 * 150 * Int_Glob: O.K. 5 151 * Bool_Glob: O.K. 1 152 * Ch_1_Glob: O.K. A 153 * Ch_2_Glob: O.K. B 154 * Arr_1_Glob[8]: O.K. 7 155 * Arr_2_Glob8/7: O.K. 1600010 156 * Ptr_Glob-> 157 * Ptr_Comp: * 98008 158 * Discr: O.K. 0 159 * Enum_Comp: O.K. 2 160 * Int_Comp: O.K. 17 161 * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING 162 * Next_Ptr_Glob-> 163 * Ptr_Comp: * 98008 same as above 164 * Discr: O.K. 0 165 * Enum_Comp: O.K. 1 166 * Int_Comp: O.K. 18 167 * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING 168 * Int_1_Loc: O.K. 5 169 * Int_2_Loc: O.K. 13 170 * Int_3_Loc: O.K. 7 171 * Enum_Loc: O.K. 1 172 * Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING 173 * Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING 174 * 175 * Register option Selected. 176 * 177 * Microseconds 1 loop: 4.53 178 * Dhrystones / second: 220690 179 * VAX MIPS rating: 125.61 180 * 181 * 182 * Dhrystone Benchmark Version 2.1 (Language: C) 183 * 184 * Month run 4/1996 185 * PC model Escom 186 * CPU Pentium 187 * Clock MHz 100 188 * Cache 256K 189 * Options Neptune chipset 190 * OS/DOS Windows 95 191 * Compiler Watcom C/ C++ 10.5 Win386 192 * OptLevel No optimisation 193 * Run by Roy Longbottom 194 * From UK 195 * Mail 101323.2241@compuserve.com 196 * 197 * Final values (* implementation-dependent): 198 * 199 * Int_Glob: O.K. 5 200 * Bool_Glob: O.K. 1 201 * Ch_1_Glob: O.K. A 202 * Ch_2_Glob: O.K. B 203 * Arr_1_Glob[8]: O.K. 7 204 * Arr_2_Glob8/7: O.K. 320010 205 * Ptr_Glob-> 206 * Ptr_Comp: * 98004 207 * Discr: O.K. 0 208 * Enum_Comp: O.K. 2 209 * Int_Comp: O.K. 17 210 * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING 211 * Next_Ptr_Glob-> 212 * Ptr_Comp: * 98004 same as above 213 * Discr: O.K. 0 214 * Enum_Comp: O.K. 1 215 * Int_Comp: O.K. 18 216 * Str_Comp: O.K. DHRYSTONE PROGRAM, SOME STRING 217 * Int_1_Loc: O.K. 5 218 * Int_2_Loc: O.K. 13 219 * Int_3_Loc: O.K. 7 220 * Enum_Loc: O.K. 1 221 * Str_1_Loc: O.K. DHRYSTONE PROGRAM, 1'ST STRING 222 * Str_2_Loc: O.K. DHRYSTONE PROGRAM, 2'ND STRING 223 * 224 * Register option Not selected. 225 * 226 * Microseconds 1 loop: 20.06 227 * Dhrystones / second: 49844 228 * VAX MIPS rating: 28.37 229 * 230 ************************************************************************** 231 */ 232 233 /* Compiler and system dependent definitions: */ 234 235 #ifndef TIME 236 #define TIMES 237 #endif 238 /* Use times(2) time function unless */ 239 /* explicitly defined otherwise */ 240 241 #ifdef TIMES 242 /* #include <sys/types.h> 243 #include <sys/times.h> */ 244 /* for "times" */ 245 #endif 246 247 #define Mic_secs_Per_Second 1000000.0 248 /* Berkeley UNIX C returns process times in seconds/HZ */ 249 250 #ifdef NOSTRUCTASSIGN 251 #define structassign(d, s) memcpy(&(d), &(s), sizeof(d)) 252 #else 253 #define structassign(d, s) d = s 254 #endif 255 256 #ifdef NOENUM 257 #define Ident_1 0 258 #define Ident_2 1 259 #define Ident_3 2 260 #define Ident_4 3 261 #define Ident_5 4 262 typedef int Enumeration; 263 #else 264 typedef enum {Ident_1, Ident_2, Ident_3, Ident_4, Ident_5} 265 Enumeration; 266 #endif 267 /* for boolean and enumeration types in Ada, Pascal */ 268 269 /* General definitions: */ 270 271 #include <stdio.h> 272 #include <string.h> 273 274 /* for strcpy, strcmp */ 275 276 #define Null 0 277 /* Value of a Null pointer */ 278 #define true 1 279 #define false 0 280 281 typedef int One_Thirty; 282 typedef int One_Fifty; 283 typedef char Capital_Letter; 284 typedef int Boolean; 285 typedef char Str_30 [31]; 286 typedef int Arr_1_Dim [50]; 287 typedef int Arr_2_Dim [50] [50]; 288 289 typedef struct record 290 { 291 struct record *Ptr_Comp; 292 Enumeration Discr; 293 union { 294 struct { 295 Enumeration Enum_Comp; 296 int Int_Comp; 297 char Str_Comp [31]; 298 } var_1; 299 struct { 300 Enumeration E_Comp_2; 301 char Str_2_Comp [31]; 302 } var_2; 303 struct { 304 char Ch_1_Comp; 305 char Ch_2_Comp; 306 } var_3; 307 } variant; 308 } Rec_Type, *Rec_Pointer; 309 310 311 312