[comp.arch] 01/31/87 Dhrystone Results and Source

gemini@homxb.UUCP (02/02/87)

#! /bin/sh
# This is a shell archive, meaning:
# 1. Remove everything above the #! /bin/sh line.
# 2. Save the resulting text in a file.
# 3. Execute the file with /bin/sh (not csh) to create:
#	announce.doc
#	report.doc
#	submit.doc
#	submit.frm
#	clarify.doc
#	dry.c
#	database.doc
#	dry.db
# This archive created: Mon Feb  2 07:10:28 1987
export PATH; PATH=/bin:/usr/bin:$PATH
if test -f 'announce.doc'
then
	echo shar: "will not over-write existing file 'announce.doc'"
else
cat << \SHAR_EOF > 'announce.doc'
These files comprise the 01/31/87 distribution of the collected
Dhrystone Benchmarks.

Enjoy.

Rick Richardson
PC Research, Inc.

ihnp4!castor!pcrat!rick
attmail!rrichardson

(201) 834-1378, (201) 918-0432, (201) 922-1134
SHAR_EOF
fi
if test -f 'report.doc'
then
	echo shar: "will not over-write existing file 'report.doc'"
else
cat << \SHAR_EOF > 'report.doc'
                DHRYSTONE 1.1 BENCHMARK SUMMARY
                 Sat Jan 31 22:40:34 EST 1987
                    SORTED BY MANUFACTURER

MANUF      MODEL      PROC     CLOCK NOREG   REG OS,COMPILER,NOTES
-----      -----      ----     ----- -----   --- -----------------
           Gridcase 3 80C86     4.77   409   438 MS-DOS 2.11,Microsoft 3.01 ,
APOLLO     DN330      68020/68 12.50  1934  1934 Domain/IX SR9.5.Bl12,CC 4.58 w/o 020,68881,(Beta OS and Compiler)
APOLLO     DN330      68020/68 12.50  2046  2046 Domain/IX SR9.5.Bl12,CC 4.58 w/020,68881,(Beta OS and Compiler)
APOLLO     DN3000     68020/68 12.50  2481  2481 Domain/IX SR9.5.Bl12,CC 4.58 w/o 020,68881,(Beta OS and Compiler)
APOLLO     DN3000     68020/68 12.50  2643  2643 Domain/IX SR9.5.Bl12,CC 4.58 w/020,68881,(Beta OS and Compiler)
AT&T       3B2/300    32000     7.20   409   410 UNIX SVR2.0,cc  ,
AT&T       3B5        WE32000  10.00   578   573 UNIX SVR2 5.2.0.1 V2,cc ? large,
AT&T       3B2/310    32100     0.00   668   671 UNIX SVR2.4,cc  ,
AT&T       3B2/300    32000     7.20   685   688 UNIX SVR2.0.4,cc  ,
AT&T       3B2/300    32000     7.70   699   697 UNIX SVR3.0,cc  ,
AT&T       UNIX PC    68010    10.00   973  1034 UNIX 5.0.3,cc  ,
AT&T       3B2/400    32100    10.00  1108  1120 UNIX SVR2.0.4,cc  ,
AT&T       6300 PLUS  80286     6.00  1225  1225 UNIX SVR2 vC3,cc  ,
AT&T       3B15       32100    14.00  1797  1798 UNIX 5.2.1,cc  ,
ATI        2000       80286     8.00  1440  1440 UNIX Microport SVR2,cc  large,0 wait state AT clone
ATI        2000       80286     8.00  2145  2145 UNIX Microport SVR2,cc  small,0 wait state AT clone
Altos Comp ACS 68000  68000     8.00   440   450 UNIX System III, Altos Release 2.0,cc  --,
Amdahl     5860                 0.00 28735 28846 UTS V,cc 1.22 ,
Amiga      1000                 0.00   643   684  ,Manx C 2.30a ,32 bit int
Amiga      1000                 0.00   880   915  ,Manx 2.30a ,16 bit int
Apollo     DN330      68020    12.50  1504  1504 Domain/IX ,cc 4.08 w/o 020,
Apollo     DN330      68020    12.50  1677  1677 Domain/IX ,cc 4.08 w/ 020,
Apple      IIe        65C02     1.02    37    37 DOS 3.3,Aztec CII v1.05i ,
Apple      Lisa 2/10  68000     5.00   505   533 XENIX 3.0 Priam,cc  ,
Apple      Macintosh  68000     8.00   510   549 Mac Finder 5.1, System 3.2,LightSpeed C 1.02 ,with new, 128K ROMs
Apple      Lisa       68000     0.00   517   550 UniPlus Sys V,cc  ,
Apple      Macintosh  68000     7.70   625   625 Mac ROM ,DeSmet  ,
Apple      Mac+       68000     7.80   714   769 Mac 3.2,Manx 1.06H ,16 bit int
Apricot    portable   8086      5.00   375   400 MS-DOS 2.11,Microsoft 3.01 ,
Arete      1100/1200  68020    12.00  2741  2808 UNIX SVR2.2,Motorola pcc2  ,
Armstrong             68000     0.00   342   363 Root V,pcc  ,
Atari      520/ST     68000     8.00   446   450 TOS ,Lattice 3.03.01 ,
Atari      520ST      68000     8.00  1063  1136 TOS ,Megamax 1.0 ,
CCI        Power 5/32 68010    12.50  1135  1192 Unix BSD 4.2,cc ? ,
Celerity   1200                 0.00  3921  3916 UNIX 4.2BSD r3.2,  ,
Celerity   1260-D     1230      0.00  4010  4045 4.2 BSD 3.2.50,cc standard -O,A 1260-D is a dual-processor 1230
Celerity   1260-D     1230      0.00  4046  4061 4.2 BSD 3.2.50,cc beta test -O,A 1260-D is a dual-processor 1230
Celerity   C-1230     NCR uP   10.00  4155  4360 UNIX 4.2BSD,cc  ,
Celerity   C1230                0.00  4702  4716 UNIX 4.2BSD r3.2,  ,
Celerity   1260                 0.00  8321  8384 UNIX 4.2BSD r3.2,  ,
Commodore  64         6510      1.00    19    34 C64 ROM ,C Power 2.9 trim,
Commodore  128        8502      2.00    43    68 C128 ROM ,C Power 128  trim,
Compaq     Compaq II  80286     8.00  1086  1140 MS-DOS 3.1,Microsoft 3.0 large,
Compaq     Compaq II  80286     8.00  1190  1282 MS-DOS 3.1,Microsoft 3.0 medium,
Compaq     Compaq II  80286     8.00  1351  1428 MS-DOS 3.1,Microsoft 3.0 small,
Compaq     386        80386    16.00  1724  1724 PCDOS 3.1,Lattice 3.00H large,
Compaq     386        80386    16.00  2000  2000 PCDOS 3.1,Lattice 3.00H large data,
Compaq     386        80386    16.00  2631  2631 PCDOS 3.1,Lattice 3.00H large data,
Compaq     386        80386    16.00  2941  2941 PCDOS 3.1,Lattice 3.00H small,
Convergent MiniFrame  68010    10.00   919   965 CTIX 3.2,cc  ,
Convergent MiniFrame  68010    10.00   933   985 UNIX SVR2,cc  ,
Counterpoi            68020    12.00  1702  1850 UNIX SV,cc  ,
Counterpoi System 19  68020    16.67  2481     0 UNIX SVR2.2,Motorola pcc2  2270,11/12/86
Cromemco   Z2         Z80       4.00   127   127 Cromix 11.26,ccc  ,
DEC        PDP-11/34A w/FP-11C  0.00   406   449 UNIX V7m,cc  ,
DEC        PDP-11/45  ?         0.00   454   506 UNIX V7M,cc ? 256KB,
DEC        VAX 11/750           0.00   836   845 BRL Sys V on 4.2BSD ,5bin/cc  ,
DEC        VAX-11/750 w/FPA     0.00   831   852 UNIX 4.2BSD,cc  ,
DEC        VAX 11/750           0.00   835   859 Root 4.2,cc  ,
DEC        PDP-11/73  J-ll,w/F  0.00   772   875 UNIX 2.9BSD,cc  ,
DEC        PDP 11/44            0.00   884   951 UNIX Sys III,cc  ,
DEC        VAX 11/780           0.00  1243  1307 UNIX 4.2BSD,cc  ,
DEC        MicroVAX I           0.00  1361  1385 Mach 4.3,cc  ,
DEC        Micro VAX            0.00  1379  1394 Ultrix 1.1,cc  ,
DEC        MicroVAX I           0.00  1385  1399 Ultrix-32m 1.1,cc  ,
DEC        VAX 11/780           0.00  1417  1441 UNIX 4.2BSD,cc  ,
DEC        VAX 11/780 MA780     0.00  1428  1470 Mach 4.3,cc  ,
DEC        VAX 11/780           0.00  1650  1640 UNIX 5.0.1,cc 4.1.1.31 ,
DEC        2060                 0.00  1677  1736 TOPS 20 ,pcc  ,
DEC        VAX 11/785           0.00  1783  1813 UNIX 4.2BSD,cc  ,
DEC        VAX 11/785           0.00  2063  2069 UNITY/VMS 5.2.2,pcc 4.3 ,
DEC        VAX 11/784           0.00  5263  5555 Mach 4.3,cc  ,1D on 4P
DEC        VAX 8600             0.00  6329  6423 UNIX 4.3BSD,cc  ,
DataMedia  932        68000    10.00   837   888 UNIX SYS V,cc  ,
Encore     Multimax   32032    10.00  1360  1360 Umax 4.2 R2.0 or V R1.0,Green Hills  ,
Fortune    32:16      68000     6.00   346   360 UNIX V7,cc  ,
GMX        Micro-20   68020    12.50  1315  1250 OS-9 1.2,Microware 2.0 ,
Genisys    AT         80286    10.00     0  2777 MSDOS ,MS 3.0 /Ot/AS/Gs/G2,
Gould      PN6005               0.00  1732  1884 UTX 1.1c+,cc  ,
Gould      PN9080               0.00  4745  4992 UTX-32 1.1C,cc  ,
Gould      PN 9080              0.00  6024  6340 UTX 2.0 beta,cc  ,
HP         9000-500   1 CPU, R 18.00  1599  1599 HP-UX 5.05,cc  ,
HP         9000-320   68020    16.67  2464  2671 HP/UX 5.02 B 9000/320,  ,
HP         9000-500   2 CPUs,  18.00  3020  3020 HP-UX 5.05,cc  ,Two copies run and added
HP         9000-500   3 CPUs,  18.00  4140  4140 HP-UX 5.05,cc  ,Three copies run and added
Hazelwood  Uniquad 1  68008     8.00   243   259 OS-9 1.2,Microware 2.0 ,
Home Brew             Z80       4.00    53    53 CPM-80 ,Hisoft C++  ,
Home Brew             Z80       2.50    91    91 CPM-80 2.2,Aztec CII 1.05g ,
Home Brew             8086      8.00   197   203 iRMX-86 V6,Intel C-86 2.0 large,??
Home Brew             8086      8.00   287   304 iRMX 86 V6,Intel C-86 2.0 small,??
IBM        PC/XT      8088      4.77   259   275 COHERENT 2.3.43,Mark Williams  ,
IBM        PC/XT      8088      4.77   326   347 MS-DOS 2.0,Microsoft 3.01 ,
IBM        PC/AT      80286     6.00   531   531 MS-DOS 3.1,Lattice 3.00h -ml (large model),
IBM        PC/AT      80286     9.05   696   692 XENIX SCO SVR2.1,cc  large,
IBM        PC/AT      80286     6.00   943   925 MS-DOS 3.1,Lattice 3.00h ,
IBM        PC/AT      80286     7.50  1162  1256 Venix/286 SVR2.1,cc Venturcom 2.2 small,
IBM        PC/AT      80286     9.05  1464  1484 XENIX SCO SVR2.1,cc  small,
IBM        PC/RT                0.00  1333  1510 UNIX 4.2BSD,cc  ,
IBM        PC/RT      (6150)w/  0.00  1537  1660 AIX SVR1,cc  ,
IBM        PC/AT      80286     8.00  1729  1796 PC-DOS 3.20,Microsoft 4.0 ,
IBM        PC/AT      80286     9.00  1976  1976 UNIX Microport SVR2,cc  small,
IBM        PC/AT      80286     8.00  2176  2239 PC-DOS 3.20,Microsoft 4.0 small,w/Cheetah 0 ws memory
IBM        4341-12              0.00  3690  3690 Amdahl UTS V,cc 1.11 ,
IBM        4341-12              0.00  3910  3910 Amdahl UTS V,cc 1.11 ,Mike Newtons "optimzer"
IBM        4381-2               0.00  4504  4901  ,c/370  ,
IBM        4381-2               0.00  5681  5681 VM/SP 3.18,Waterloo 1.2 ,
IBM        4381-2               0.00  6440  6440 Amdahl UTS V,cc 1.11 ,
IBM        4381-2               0.00  6850  6850 Amdahl UTS V,cc 1.11 ,Mike Newtons "optimizer"
IBM        3090/200             0.00 31250 31250  ,  ,
IMP        Mentor     68020    16.00  2632  2747 Root V.2,pcc-2  ,
ISI        Optimum V  68020    16.00  3245  3391 UNIX 4.2BSD r3.05,ISI  ,
ISI        Optimum    68020    16.67  3074  3452 UNIX ISI 3.0.1,cc  ,
ISI        Optimum V  68020    16.00  3778  3977 UNIX 4.2BSD r3.05,Green Hills 1.8.0 ,
Intel      386/24 sys 80386    16.00  4725  5089 UNIX System V.3 beta,rcc 2.01 ,386 Multibus I w/64KB cache
Intel      386/24 sys 80386    16.00  6250  6250 UNIX System V.3 beta,greenhills cc v1.8.2C ,386 Multibus I w/64KB cache
Intel      386/24 sys 80386    20.00  5966  6394 UNIX System V.3 beta,rcc 2.01 ,386 Multibus I w/64KB cache
Intel      386/20     80386    16.00  6995  6677 UNIX SVR3,Green Hills C-386 1.8.2E none,-O means loop optimize, qed faster NOREG
Intel      386/24 sys 80386    20.00  7810  7810 UNIX System V.3 beta,greenhills cc v1.8.2C ,386 Multibus I w/64KB cache
MASSCOMP   5600; 1 CP 68020/68 16.67  4161  4155 RTU 3.0,cc 1.121 ,TOO LONG
MIPS       M/500      R2000     8.00  8855 10309 UNIX 4.3BSD,cc  ,
Motorola   MVME121    68010    10.00   820   865 Uniflex ,cc 1.3:0 ,MVME320,050
Motorola   System 113 MC68020  16.67  3246  3257 System V R2V2.2,pcc2 High level Optim and peep Optim ATT -O,
NCR        Decision M 8088      4.77   166   166 MS-DOS 2.11,Lattice 2.14 small,
NCR        PC4        8088      0.00   212   212 MS-DOS 2.11,Lattice 2.14 small,
NCR        Decision M 8088      4.77   250   250 MS-DOS 2.11,Lattice 3.0g small,
NCR        PC4        8088      4.77   322   322 MS-DOS 2.11,Lattice 3.0g small,
NCR        PC6        8088      8.00   349   349 MS-DOS 2.11,Lattice 2.14 small,
NCR        PC6        8088      8.00   512   512 MS-DOS 2.11,Lattice 3.0g small,
NCR        PC-8       80286     8.00   653   649 XENIX SCO SVR2.0.4,cc  large,
NCR        PC-8       80286     8.00   981   983 XENIX SCO SVR2.0.4,cc  middle,
NCR        PC-8       80286     8.00  1283  1299 XENIX SCO SVR2.0.4,cc  small,
National   VR332      32332    15.00  2851  2851 UNIX SVR2.2,NSC GNX 2 -O,
National S ICM-3216   32016    10.00     0  2688 UNIX SVR2,cc  ,Wouldn't run noreg
OPUS SYSTE Opus 32.16 32016    10.00   736   776 Opus5(UNIX) 2.0v2C2.1,cc SysV.2.0 Ver 1.5 ,hosted on IBM PC/AT
Olivetti   m24        8086      8.00     0   847 MSDOS ,MS 3.0 /Ot/AS/Gs,
Olivetti   m24        V30       8.00     0  1086 MSDOS ,MS 3.0 /Ot/AS/Gs/G0,
Olivetti   m24        V30       8.00     0  1111 MSDOS ,MS 3.0 /Ot/AS/Gs/G1,
PRIME      9955                 0.00  1633  1633 PRIMIX 1.2,CC 4.0-19.4 -OPTIMIZE -HIGH,Primix (Unix) on top of Primos 20.0.4
PRIME      9955                 0.00  2859  2859 PRIMOS 20.0.4,CC 4.0-19.4 -OPTIMIZE -HIGH,V-mode compiler
PRIME      9955                 0.00  3348  3348 PRIMOS 20.0.4,CI 4.0-19.4 -32IX,I-mode compiler
PRIME      9955                 0.00  3492  3492 PRIMOS 20.0.4,CI 4.0-19.4 -32IX -INTRINSIC strcpy,
Phillips              68000     8.00   313   333 Root V.2,pcc-2  ,
Plessey    system68   68000     8.00   408   436 Root V,pcc  ,
Plessey    Mantra     68010    12.00  1089  1157 Root V.2,pcc2  ,
Plexus     P35        68000    12.50   835   894 UNIX SYS III,cc  ,
Pyramid    90x        XBIF      8.00  1779  1779 OSx 3.1,CLE 3.2.0 ,
Pyramid    90x        DCU       8.00  2898  2898 OSx 3.1,CLE 3.2.0 ,
Pyramid    98xe       DCU      10.00  3627  3627 OSx 3.1,CLE 3.2.0 ,
Pyramid    Workcenter DCU      10.00  3627  3627 OSx 3.1,CLE 3.2.0 ,
Pyramid    98X        DCU      10.00  3671  3671 OSx 3.1,CLE 3.2.0 ,
Pyramid    98xe       DCU,FPA  10.00  3773  3773 OSx 3.1,CLE 3.2.0 ,
Pyramid    98X        DCU,FPA  10.00  3856  3856 OSx ,CLE 3.2.0 ,
Racal      Redac      68010    10.00   490   525 Root V.2,pcc-2  ,
Ridge      32C V1               0.00  1628  1695 ROS 3.3,Ridge (older) ,
Ridge Comp Ridge 3200 Propriet 12.00  6119  6240 ROS 3.4,rc 2.0 none,
SSB        Chieftan   6809      2.00   210   249 OS/9 Level II 1.2,Microware  ,
Sequent    Balance 80 32032    10.00  1097  1137 Dynix ,cc  ,
Sherry     AT         80286     8.00     0  1724 MSDOS ,MS 3.0 /Ot/AS/Gs/G2,
Siemens    PC-MX2     32016    10.00   717   745 Root V.2,cc  ,
Stride                68010    10.00  1164  1252 UniStride SVR2,cc  ,
Sun        1/100U               0.00   957  1029 UNIX Sun 2.0,cc  ,
Sun        2/120      68010    10.00   950  1051 UNIX 4.2BSD,cc  no -O,
Sun        1/100U               0.00  1039  1075 UNIX Sun 2.0,Greehills  ,
Sun        2                    0.00  1034  1110 UNIX 4.2BSD,cc  ,
Sun        2/120      68010    10.00  1058  1142 UNIX Sun 2.2,cc  ,
Sun        3/50       68020    15.00  2280  2540 UNIX Sun 3.0,cc  ,
Sun        3/160      68020    16.67  2843  3134 UNIX Sun 3.0,cc  ,
Sun        3/160      68020    16.67  2921  3229 UNIX Sun 3.0,cc  -fsoft,
Sun        3/160      68020    16.67  2949  3236 UNIX Sun 3.0,cc  -f68881,
Sun        3/160      68020    16.67  2946  3246 Sun 4.2 3.0A,cc  ,
Tadpole    Titan      68010    10.00   823   882 Root V,pcc  ,
Torch      Triple X   68010     0.00   578   625 Root V,pcc  ,
VT                    68000     8.00   422   451 Root V.2,pcc2  ,
Victor     Sirius     8088      0.00   284   295 MSDOS 2.11,Microsoft 3.0 large,
Victor     Sirius     8088      0.00   317   335 MSDOS 2.11,Microsoft 3.0 middle,
Victor     Sirius     8088      0.00   357   381 MSDOS 2.11,Microsoft 3.0 small,
Whitechape MG1        32016     8.00   636   675 UNIX 4.2BSD,cc  ,
Zilog      8000 model Z8001     6.00   727   758 Zeus 3.21,cc  segmented,
Zilog      8000 model Z8001     6.00   831   878 Zeus 3.21,cc  non-segment,
benchMark             32016    10.00   643   673 Root V.2,pcc2  ,



                DHRYSTONE 1.1 BENCHMARK SUMMARY
                 Sat Jan 31 22:40:34 EST 1987
                    SORTED BY PERFORMANCE

MANUF      MODEL      PROC     CLOCK NOREG   REG OS,COMPILER,NOTES
-----      -----      ----     ----- -----   --- -----------------
Counterpoi System 19  68020    16.67  2481     0 UNIX SVR2.2,Motorola pcc2  2270,11/12/86
Commodore  64         6510      1.00    19    34 C64 ROM ,C Power 2.9 trim,
Apple      IIe        65C02     1.02    37    37 DOS 3.3,Aztec CII v1.05i ,
Home Brew             Z80       4.00    53    53 CPM-80 ,Hisoft C++  ,
Commodore  128        8502      2.00    43    68 C128 ROM ,C Power 128  trim,
Home Brew             Z80       2.50    91    91 CPM-80 2.2,Aztec CII 1.05g ,
Cromemco   Z2         Z80       4.00   127   127 Cromix 11.26,ccc  ,
NCR        Decision M 8088      4.77   166   166 MS-DOS 2.11,Lattice 2.14 small,
Home Brew             8086      8.00   197   203 iRMX-86 V6,Intel C-86 2.0 large,??
NCR        PC4        8088      0.00   212   212 MS-DOS 2.11,Lattice 2.14 small,
SSB        Chieftan   6809      2.00   210   249 OS/9 Level II 1.2,Microware  ,
NCR        Decision M 8088      4.77   250   250 MS-DOS 2.11,Lattice 3.0g small,
Hazelwood  Uniquad 1  68008     8.00   243   259 OS-9 1.2,Microware 2.0 ,
IBM        PC/XT      8088      4.77   259   275 COHERENT 2.3.43,Mark Williams  ,
Victor     Sirius     8088      0.00   284   295 MSDOS 2.11,Microsoft 3.0 large,
Home Brew             8086      8.00   287   304 iRMX 86 V6,Intel C-86 2.0 small,??
NCR        PC4        8088      4.77   322   322 MS-DOS 2.11,Lattice 3.0g small,
Phillips              68000     8.00   313   333 Root V.2,pcc-2  ,
Victor     Sirius     8088      0.00   317   335 MSDOS 2.11,Microsoft 3.0 middle,
IBM        PC/XT      8088      4.77   326   347 MS-DOS 2.0,Microsoft 3.01 ,
NCR        PC6        8088      8.00   349   349 MS-DOS 2.11,Lattice 2.14 small,
Fortune    32:16      68000     6.00   346   360 UNIX V7,cc  ,
Armstrong             68000     0.00   342   363 Root V,pcc  ,
Victor     Sirius     8088      0.00   357   381 MSDOS 2.11,Microsoft 3.0 small,
Apricot    portable   8086      5.00   375   400 MS-DOS 2.11,Microsoft 3.01 ,
AT&T       3B2/300    32000     7.20   409   410 UNIX SVR2.0,cc  ,
Plessey    system68   68000     8.00   408   436 Root V,pcc  ,
           Gridcase 3 80C86     4.77   409   438 MS-DOS 2.11,Microsoft 3.01 ,
DEC        PDP-11/34A w/FP-11C  0.00   406   449 UNIX V7m,cc  ,
Altos Comp ACS 68000  68000     8.00   440   450 UNIX System III, Altos Release 2.0,cc  --,
Atari      520/ST     68000     8.00   446   450 TOS ,Lattice 3.03.01 ,
VT                    68000     8.00   422   451 Root V.2,pcc2  ,
DEC        PDP-11/45  ?         0.00   454   506 UNIX V7M,cc ? 256KB,
NCR        PC6        8088      8.00   512   512 MS-DOS 2.11,Lattice 3.0g small,
Racal      Redac      68010    10.00   490   525 Root V.2,pcc-2  ,
IBM        PC/AT      80286     6.00   531   531 MS-DOS 3.1,Lattice 3.00h -ml (large model),
Apple      Lisa 2/10  68000     5.00   505   533 XENIX 3.0 Priam,cc  ,
Apple      Macintosh  68000     8.00   510   549 Mac Finder 5.1, System 3.2,LightSpeed C 1.02 ,with new, 128K ROMs
Apple      Lisa       68000     0.00   517   550 UniPlus Sys V,cc  ,
AT&T       3B5        WE32000  10.00   578   573 UNIX SVR2 5.2.0.1 V2,cc ? large,
Apple      Macintosh  68000     7.70   625   625 Mac ROM ,DeSmet  ,
Torch      Triple X   68010     0.00   578   625 Root V,pcc  ,
NCR        PC-8       80286     8.00   653   649 XENIX SCO SVR2.0.4,cc  large,
AT&T       3B2/310    32100     0.00   668   671 UNIX SVR2.4,cc  ,
benchMark             32016    10.00   643   673 Root V.2,pcc2  ,
Whitechape MG1        32016     8.00   636   675 UNIX 4.2BSD,cc  ,
Amiga      1000                 0.00   643   684  ,Manx C 2.30a ,32 bit int
AT&T       3B2/300    32000     7.20   685   688 UNIX SVR2.0.4,cc  ,
IBM        PC/AT      80286     9.05   696   692 XENIX SCO SVR2.1,cc  large,
AT&T       3B2/300    32000     7.70   699   697 UNIX SVR3.0,cc  ,
Siemens    PC-MX2     32016    10.00   717   745 Root V.2,cc  ,
Zilog      8000 model Z8001     6.00   727   758 Zeus 3.21,cc  segmented,
Apple      Mac+       68000     7.80   714   769 Mac 3.2,Manx 1.06H ,16 bit int
OPUS SYSTE Opus 32.16 32016    10.00   736   776 Opus5(UNIX) 2.0v2C2.1,cc SysV.2.0 Ver 1.5 ,hosted on IBM PC/AT
DEC        VAX 11/750           0.00   836   845 BRL Sys V on 4.2BSD ,5bin/cc  ,
Olivetti   m24        8086      8.00     0   847 MSDOS ,MS 3.0 /Ot/AS/Gs,
DEC        VAX-11/750 w/FPA     0.00   831   852 UNIX 4.2BSD,cc  ,
DEC        VAX 11/750           0.00   835   859 Root 4.2,cc  ,
Motorola   MVME121    68010    10.00   820   865 Uniflex ,cc 1.3:0 ,MVME320,050
DEC        PDP-11/73  J-ll,w/F  0.00   772   875 UNIX 2.9BSD,cc  ,
Zilog      8000 model Z8001     6.00   831   878 Zeus 3.21,cc  non-segment,
Tadpole    Titan      68010    10.00   823   882 Root V,pcc  ,
DataMedia  932        68000    10.00   837   888 UNIX SYS V,cc  ,
Plexus     P35        68000    12.50   835   894 UNIX SYS III,cc  ,
Amiga      1000                 0.00   880   915  ,Manx 2.30a ,16 bit int
IBM        PC/AT      80286     6.00   943   925 MS-DOS 3.1,Lattice 3.00h ,
DEC        PDP 11/44            0.00   884   951 UNIX Sys III,cc  ,
Convergent MiniFrame  68010    10.00   919   965 CTIX 3.2,cc  ,
NCR        PC-8       80286     8.00   981   983 XENIX SCO SVR2.0.4,cc  middle,
Convergent MiniFrame  68010    10.00   933   985 UNIX SVR2,cc  ,
Sun        1/100U               0.00   957  1029 UNIX Sun 2.0,cc  ,
AT&T       UNIX PC    68010    10.00   973  1034 UNIX 5.0.3,cc  ,
Sun        2/120      68010    10.00   950  1051 UNIX 4.2BSD,cc  no -O,
Sun        1/100U               0.00  1039  1075 UNIX Sun 2.0,Greehills  ,
Olivetti   m24        V30       8.00     0  1086 MSDOS ,MS 3.0 /Ot/AS/Gs/G0,
Sun        2                    0.00  1034  1110 UNIX 4.2BSD,cc  ,
Olivetti   m24        V30       8.00     0  1111 MSDOS ,MS 3.0 /Ot/AS/Gs/G1,
AT&T       3B2/400    32100    10.00  1108  1120 UNIX SVR2.0.4,cc  ,
Atari      520ST      68000     8.00  1063  1136 TOS ,Megamax 1.0 ,
Sequent    Balance 80 32032    10.00  1097  1137 Dynix ,cc  ,
Compaq     Compaq II  80286     8.00  1086  1140 MS-DOS 3.1,Microsoft 3.0 large,
Sun        2/120      68010    10.00  1058  1142 UNIX Sun 2.2,cc  ,
Plessey    Mantra     68010    12.00  1089  1157 Root V.2,pcc2  ,
CCI        Power 5/32 68010    12.50  1135  1192 Unix BSD 4.2,cc ? ,
AT&T       6300 PLUS  80286     6.00  1225  1225 UNIX SVR2 vC3,cc  ,
GMX        Micro-20   68020    12.50  1315  1250 OS-9 1.2,Microware 2.0 ,
Stride                68010    10.00  1164  1252 UniStride SVR2,cc  ,
IBM        PC/AT      80286     7.50  1162  1256 Venix/286 SVR2.1,cc Venturcom 2.2 small,
Compaq     Compaq II  80286     8.00  1190  1282 MS-DOS 3.1,Microsoft 3.0 medium,
NCR        PC-8       80286     8.00  1283  1299 XENIX SCO SVR2.0.4,cc  small,
DEC        VAX 11/780           0.00  1243  1307 UNIX 4.2BSD,cc  ,
Encore     Multimax   32032    10.00  1360  1360 Umax 4.2 R2.0 or V R1.0,Green Hills  ,
DEC        MicroVAX I           0.00  1361  1385 Mach 4.3,cc  ,
DEC        Micro VAX            0.00  1379  1394 Ultrix 1.1,cc  ,
DEC        MicroVAX I           0.00  1385  1399 Ultrix-32m 1.1,cc  ,
Compaq     Compaq II  80286     8.00  1351  1428 MS-DOS 3.1,Microsoft 3.0 small,
ATI        2000       80286     8.00  1440  1440 UNIX Microport SVR2,cc  large,0 wait state AT clone
DEC        VAX 11/780           0.00  1417  1441 UNIX 4.2BSD,cc  ,
DEC        VAX 11/780 MA780     0.00  1428  1470 Mach 4.3,cc  ,
IBM        PC/AT      80286     9.05  1464  1484 XENIX SCO SVR2.1,cc  small,
Apollo     DN330      68020    12.50  1504  1504 Domain/IX ,cc 4.08 w/o 020,
IBM        PC/RT                0.00  1333  1510 UNIX 4.2BSD,cc  ,
HP         9000-500   1 CPU, R 18.00  1599  1599 HP-UX 5.05,cc  ,
PRIME      9955                 0.00  1633  1633 PRIMIX 1.2,CC 4.0-19.4 -OPTIMIZE -HIGH,Primix (Unix) on top of Primos 20.0.4
DEC        VAX 11/780           0.00  1650  1640 UNIX 5.0.1,cc 4.1.1.31 ,
IBM        PC/RT      (6150)w/  0.00  1537  1660 AIX SVR1,cc  ,
Apollo     DN330      68020    12.50  1677  1677 Domain/IX ,cc 4.08 w/ 020,
Ridge      32C V1               0.00  1628  1695 ROS 3.3,Ridge (older) ,
Compaq     386        80386    16.00  1724  1724 PCDOS 3.1,Lattice 3.00H large,
Sherry     AT         80286     8.00     0  1724 MSDOS ,MS 3.0 /Ot/AS/Gs/G2,
DEC        2060                 0.00  1677  1736 TOPS 20 ,pcc  ,
Pyramid    90x        XBIF      8.00  1779  1779 OSx 3.1,CLE 3.2.0 ,
IBM        PC/AT      80286     8.00  1729  1796 PC-DOS 3.20,Microsoft 4.0 ,
AT&T       3B15       32100    14.00  1797  1798 UNIX 5.2.1,cc  ,
DEC        VAX 11/785           0.00  1783  1813 UNIX 4.2BSD,cc  ,
Counterpoi            68020    12.00  1702  1850 UNIX SV,cc  ,
Gould      PN6005               0.00  1732  1884 UTX 1.1c+,cc  ,
APOLLO     DN330      68020/68 12.50  1934  1934 Domain/IX SR9.5.Bl12,CC 4.58 w/o 020,68881,(Beta OS and Compiler)
IBM        PC/AT      80286     9.00  1976  1976 UNIX Microport SVR2,cc  small,
Compaq     386        80386    16.00  2000  2000 PCDOS 3.1,Lattice 3.00H large data,
APOLLO     DN330      68020/68 12.50  2046  2046 Domain/IX SR9.5.Bl12,CC 4.58 w/020,68881,(Beta OS and Compiler)
DEC        VAX 11/785           0.00  2063  2069 UNITY/VMS 5.2.2,pcc 4.3 ,
ATI        2000       80286     8.00  2145  2145 UNIX Microport SVR2,cc  small,0 wait state AT clone
IBM        PC/AT      80286     8.00  2176  2239 PC-DOS 3.20,Microsoft 4.0 small,w/Cheetah 0 ws memory
APOLLO     DN3000     68020/68 12.50  2481  2481 Domain/IX SR9.5.Bl12,CC 4.58 w/o 020,68881,(Beta OS and Compiler)
Sun        3/50       68020    15.00  2280  2540 UNIX Sun 3.0,cc  ,
Compaq     386        80386    16.00  2631  2631 PCDOS 3.1,Lattice 3.00H large data,
APOLLO     DN3000     68020/68 12.50  2643  2643 Domain/IX SR9.5.Bl12,CC 4.58 w/020,68881,(Beta OS and Compiler)
HP         9000-320   68020    16.67  2464  2671 HP/UX 5.02 B 9000/320,  ,
National S ICM-3216   32016    10.00     0  2688 UNIX SVR2,cc  ,Wouldn't run noreg
IMP        Mentor     68020    16.00  2632  2747 Root V.2,pcc-2  ,
Genisys    AT         80286    10.00     0  2777 MSDOS ,MS 3.0 /Ot/AS/Gs/G2,
Arete      1100/1200  68020    12.00  2741  2808 UNIX SVR2.2,Motorola pcc2  ,
National   VR332      32332    15.00  2851  2851 UNIX SVR2.2,NSC GNX 2 -O,
PRIME      9955                 0.00  2859  2859 PRIMOS 20.0.4,CC 4.0-19.4 -OPTIMIZE -HIGH,V-mode compiler
Pyramid    90x        DCU       8.00  2898  2898 OSx 3.1,CLE 3.2.0 ,
Compaq     386        80386    16.00  2941  2941 PCDOS 3.1,Lattice 3.00H small,
HP         9000-500   2 CPUs,  18.00  3020  3020 HP-UX 5.05,cc  ,Two copies run and added
Sun        3/160      68020    16.67  2843  3134 UNIX Sun 3.0,cc  ,
Sun        3/160      68020    16.67  2921  3229 UNIX Sun 3.0,cc  -fsoft,
Sun        3/160      68020    16.67  2949  3236 UNIX Sun 3.0,cc  -f68881,
Sun        3/160      68020    16.67  2946  3246 Sun 4.2 3.0A,cc  ,
Motorola   System 113 MC68020  16.67  3246  3257 System V R2V2.2,pcc2 High level Optim and peep Optim ATT -O,
PRIME      9955                 0.00  3348  3348 PRIMOS 20.0.4,CI 4.0-19.4 -32IX,I-mode compiler
ISI        Optimum V  68020    16.00  3245  3391 UNIX 4.2BSD r3.05,ISI  ,
ISI        Optimum    68020    16.67  3074  3452 UNIX ISI 3.0.1,cc  ,
PRIME      9955                 0.00  3492  3492 PRIMOS 20.0.4,CI 4.0-19.4 -32IX -INTRINSIC strcpy,
Pyramid    98xe       DCU      10.00  3627  3627 OSx 3.1,CLE 3.2.0 ,
Pyramid    Workcenter DCU      10.00  3627  3627 OSx 3.1,CLE 3.2.0 ,
Pyramid    98X        DCU      10.00  3671  3671 OSx 3.1,CLE 3.2.0 ,
IBM        4341-12              0.00  3690  3690 Amdahl UTS V,cc 1.11 ,
Pyramid    98xe       DCU,FPA  10.00  3773  3773 OSx 3.1,CLE 3.2.0 ,
Pyramid    98X        DCU,FPA  10.00  3856  3856 OSx ,CLE 3.2.0 ,
IBM        4341-12              0.00  3910  3910 Amdahl UTS V,cc 1.11 ,Mike Newtons "optimzer"
Celerity   1200                 0.00  3921  3916 UNIX 4.2BSD r3.2,  ,
ISI        Optimum V  68020    16.00  3778  3977 UNIX 4.2BSD r3.05,Green Hills 1.8.0 ,
Celerity   1260-D     1230      0.00  4010  4045 4.2 BSD 3.2.50,cc standard -O,A 1260-D is a dual-processor 1230
Celerity   1260-D     1230      0.00  4046  4061 4.2 BSD 3.2.50,cc beta test -O,A 1260-D is a dual-processor 1230
HP         9000-500   3 CPUs,  18.00  4140  4140 HP-UX 5.05,cc  ,Three copies run and added
MASSCOMP   5600; 1 CP 68020/68 16.67  4161  4155 RTU 3.0,cc 1.121 ,TOO LONG
Celerity   C-1230     NCR uP   10.00  4155  4360 UNIX 4.2BSD,cc  ,
Celerity   C1230                0.00  4702  4716 UNIX 4.2BSD r3.2,  ,
IBM        4381-2               0.00  4504  4901  ,c/370  ,
Gould      PN9080               0.00  4745  4992 UTX-32 1.1C,cc  ,
Intel      386/24 sys 80386    16.00  4725  5089 UNIX System V.3 beta,rcc 2.01 ,386 Multibus I w/64KB cache
DEC        VAX 11/784           0.00  5263  5555 Mach 4.3,cc  ,1D on 4P
IBM        4381-2               0.00  5681  5681 VM/SP 3.18,Waterloo 1.2 ,
Ridge Comp Ridge 3200 Propriet 12.00  6119  6240 ROS 3.4,rc 2.0 none,
Intel      386/24 sys 80386    16.00  6250  6250 UNIX System V.3 beta,greenhills cc v1.8.2C ,386 Multibus I w/64KB cache
Gould      PN 9080              0.00  6024  6340 UTX 2.0 beta,cc  ,
Intel      386/24 sys 80386    20.00  5966  6394 UNIX System V.3 beta,rcc 2.01 ,386 Multibus I w/64KB cache
DEC        VAX 8600             0.00  6329  6423 UNIX 4.3BSD,cc  ,
IBM        4381-2               0.00  6440  6440 Amdahl UTS V,cc 1.11 ,
Intel      386/20     80386    16.00  6995  6677 UNIX SVR3,Green Hills C-386 1.8.2E none,-O means loop optimize, qed faster NOREG
IBM        4381-2               0.00  6850  6850 Amdahl UTS V,cc 1.11 ,Mike Newtons "optimizer"
Intel      386/24 sys 80386    20.00  7810  7810 UNIX System V.3 beta,greenhills cc v1.8.2C ,386 Multibus I w/64KB cache
Celerity   1260                 0.00  8321  8384 UNIX 4.2BSD r3.2,  ,
MIPS       M/500      R2000     8.00  8855 10309 UNIX 4.3BSD,cc  ,
Amdahl     5860                 0.00 28735 28846 UTS V,cc 1.22 ,
IBM        3090/200             0.00 31250 31250  ,  ,
SHAR_EOF
fi
if test -f 'submit.doc'
then
	echo shar: "will not over-write existing file 'submit.doc'"
else
cat << \SHAR_EOF > 'submit.doc'
SUBMISSION PROCEDURE
I'm no longer accepting or reporting results from the 1.0 version.
Remember, the "goofed" version?  I am now keeping a real database of
all the reported results.  To help me in automating this process,
I am requesting that all results sent to me are on a copy of the
form in "submit.frm", and mailed to:

	ihnp4!castor!pcrat!dry

A sample filled out form looks like this:

DHRYSTONE 1.1 BENCHMARK REPORTING FORM
MANUF: AT&T
MODEL: 6300 PLUS
PROC: 80286
CLOCK: 6
OS: UNIX
OVERSION: SVR2
COMPILER: cc
CVERSION: 2.0
OPTIONS: large
NOREG: 99999
REG: 99999
NOTES: immersed unit in He
DATE: 8/15/86
SUBMITTER: ihnp4!frostbite (Abby Normal)
MAILTO: ihnp4!castor!pcrat!dry

The entire form must be sent for each entry.  Do not split long notes
onto two or more lines.  The mail scanner I use to pull this stuff
directly into the database isn't that smart.  You can place
additional comments either before the "DHRYSTONE" line, or after the
"MAILTO" line.

The good news is that this new format allows reporting the information
in several ways.  I have attached reports sorted by manufacturer and
by performance.  I am also reporting all reasonable submissions, even
for identical configurations.  I gave up trying to figure out which one
might be a better measure.  These things aren't all that reliable a
measure of performance, anyhow, and anybody who quibbles over
say a 10% difference between machines is missing the point, as stated
below.
SHAR_EOF
fi
if test -f 'submit.frm'
then
	echo shar: "will not over-write existing file 'submit.frm'"
else
cat << \SHAR_EOF > 'submit.frm'
DHRYSTONE 1.1 BENCHMARK REPORTING FORM [DO NOT DELE
MANUF:
MODEL:
PROC:
CLOCK:
OS:
OVERSION:
COMPILER:
CVERSION:
OPTIONS:
NOREG:
REG:
NOTES:
DATE:
SUBMITTER:
MAILTO: ihnp4!castor!pcrat!dry
SHAR_EOF
fi
if test -f 'clarify.doc'
then
	echo shar: "will not over-write existing file 'clarify.doc'"
else
cat << \SHAR_EOF > 'clarify.doc'
CLARIFICATION
There seems to have been a great deal of confusion over what this
benchmark measures, and how to use these results.  Let me try to clarify
this:

	1) DHRYSTONE is a measure of processor+compiler efficiency in
	   executing a 'typical' program.  The 'typical' program was
	   designed by measuring statistics on a great number of
	   'real' programs.  The 'typical' program was then written
	   by Reinhold P. Weicker using these statistics.  The
	   program is balanced according to statement type, as well
	   as data type.

	2) DHRYSTONE does not use floating point.  Typical programs don't.

	3) DHRYSTONE does not do I/O.  Typical programs do, but then
	   we'd have a whole can of worms opened up.

	4) DHRYSTONE does not contain much code that can be optimized
	   by vector processors.  That's why a CRAY doesn't look real
	   fast, they weren't built to do this sort of computing.

	5) DHRYSTONE does not measure OS performance, as it avoids
	   calling the O.S.  The O.S. is indicated in the results only
	   to help in identifying the compiler technology.

If somebody asked me to pick out the best machine for the money, I
wouldn't look at just the results of DHRYSTONE.  I'd probably:

	1) Run DHRYSTONE to get a feel for the compiler+processor
	   speed.
	2) Run any number of benchmarks to check disk I/O bandwidth,
	   using both sequential and random read/writes.
	3) Run a multitasking benchmark to check multi-user response
	   time.  Typically, these benchmarks run several types of
	   programs such as editors, shell scripts, sorts, compiles,
	   and plot the results against the number of simulated users.
	4) If appropriate for the intended use, run WHETSTONE, to determine
	   floating point performance.
	5) If appropriate for intended use, run some programs which do
	   vector and matrix computations.
	6) Figure out what the box will:
		- cost to buy
		- cost to operate and maintain
		- be worth when it is sold
		- be worth if the manufacturer goes out of business
	7) Having done the above, I probably have a hand-full of
	   machines which meet my price/performance requirements.
	   Now, I find out if the applications programs I'd like
	   to use will run on any of these machines.  I also find
	   out how much interest people have in writing new software
	   for the machine, and look carefully at the migration path
	   I will have to take when I reach the limits of the machine.

To summarize, DHRYSTONES by themselves are not anything more than
a way to win free beers when arguing 'Box-A versus Box-B' religion.
They do provide insight into Box-A/Compiler-A versus Box-A/Compiler-B
comparisons.

As usual, all comments and new results should be mailed directly
to me at ..ihnp4!castor!pcrat!dry.  I will summarize
and post to the net.  These results are also being sent to Rheinhold
Weicker for adding to his list of Pascal and Ada results.

A SPECIAL THANKS
I didn't write the DHRYSTONE benchmark.  Rheinhold Weicker did. He has
certainly provided us with a useful tool for benchmarking, and is
to be congratulated.

			Rick Richardson
			PC Research, Inc.
			(201) 834-1378 (9-17 EST)
			(201) 922-1134 (7-9,17-24 EST)
			..ihnp4!castor!pcrat!rick	(normal mail)
			..ihnp4!castor!pcrat!dry	(results only)



SHAR_EOF
fi
if test -f 'dry.c'
then
	echo shar: "will not over-write existing file 'dry.c'"
else
cat << \SHAR_EOF > 'dry.c'
/*
 *
 *	"DHRYSTONE" Benchmark Program
 *
 *	Version:	C/1.1, 12/01/84
 *
 *	Date:		PROGRAM updated 01/06/86, COMMENTS changed 01/31/87
 *
 *	Author:		Reinhold P. Weicker,  CACM Vol 27, No 10, 10/84 pg. 1013
 *			Translated from ADA by Rick Richardson
 *			Every method to preserve ADA-likeness has been used,
 *			at the expense of C-ness.
 *
 *	Compile:	cc -O dry.c -o drynr			: No registers
 *			cc -O -DREG=register dry.c -o dryr	: Registers
 *
 *	Defines:	Defines are provided for old C compiler's
 *			which don't have enums, and can't assign structures.
 *			The time(2) function is library dependant; Most
 *			return the time in seconds, but beware of some, like
 *			Aztec C, which return other units.
 *			The LOOPS define is initially set for 50000 loops.
 *			If you have a machine with large integers and is
 *			very fast, please change this number to 500000 to
 *			get better accuracy.  Please select the way to
 *			measure the execution time using the TIME define.
 *			For single user machines, time(2) is adequate. For
 *			multi-user machines where you cannot get single-user
 *			access, use the times(2) function.  If you have
 *			neither, use a stopwatch in the dead of night.
 *			Use a "printf" at the point marked "start timer"
 *			to begin your timings. DO NOT use the UNIX "time(1)"
 *			command, as this will measure the total time to
 *			run this program, which will (erroneously) include
 *			the time to malloc(3) storage and to compute the
 *			time it takes to do nothing.
 *
 *	Run:		drynr; dryr
 *
 *	Results:	If you get any new machine/OS results, please send to:
 *
 *				ihnp4!castor!pcrat!rick
 *
 *			and thanks to all that do.
 *
 *	Note:		I order the list in increasing performance of the
 *			"with registers" benchmark.  If the compiler doesn't
 *			provide register variables, then the benchmark
 *			is the same for both REG and NOREG.
 *
 *	PLEASE:		Send complete information about the machine type,
 *			clock speed, OS and C manufacturer/version.  If
 *			the machine is modified, tell me what was done.
 *			On UNIX, execute uname -a and cc -V to get this info.
 *
 *	80x8x NOTE:	80x8x benchers: please try to do all memory models
 *			for a particular compiler.
 *
 *
 *	The following program contains statements of a high-level programming
 *	language (C) in a distribution considered representative:
 *
 *	assignments			53%
 *	control statements		32%
 *	procedure, function calls	15%
 *
 *	100 statements are dynamically executed.  The program is balanced with
 *	respect to the three aspects:
 *		- statement type
 *		- operand type (for simple data types)
 *		- operand access
 *			operand global, local, parameter, or constant.
 *
 *	The combination of these three aspects is balanced only approximately.
 *
 *	The program does not compute anything meaningfull, but it is
 *	syntactically and semantically correct.
 *
 */

/* Accuracy of timings and human fatigue controlled by next two lines */
#define LOOPS	50000		/* Use this for slow or 16 bit machines */
/*#define LOOPS	500000		/* Use this for faster machines */

/* Compiler dependent options */
#undef	NOENUM			/* Define if compiler has no enum's */
#undef	NOSTRUCTASSIGN		/* Define if compiler can't assign structures */

/* define only one of the next two defines */
#define TIMES			/* Use times(2) time function */
/*#define TIME			/* Use time(2) time function */

/* define the granularity of your times(2) function (when used) */
/*#define HZ	50		/* times(2) returns 1/50 second (europe?) */
#define HZ	60		/* times(2) returns 1/60 second (most) */
/*#define HZ	100		/* times(2) returns 1/100 second (WECo) */

/* for compatibility with goofed up version */
/*#undef GOOF			/* Define if you want the goofed up version */

#ifdef GOOF
char	Version[] = "1.0";
#else
char	Version[] = "1.1";
#endif

#ifdef	NOSTRUCTASSIGN
#define	structassign(d, s)	memcpy(&(d), &(s), sizeof(d))
#else
#define	structassign(d, s)	d = s
#endif

#ifdef	NOENUM
#define	Ident1	1
#define	Ident2	2
#define	Ident3	3
#define	Ident4	4
#define	Ident5	5
typedef int	Enumeration;
#else
typedef enum	{Ident1, Ident2, Ident3, Ident4, Ident5} Enumeration;
#endif

typedef int	OneToThirty;
typedef int	OneToFifty;
typedef char	CapitalLetter;
typedef char	String30[31];
typedef int	Array1Dim[51];
typedef int	Array2Dim[51][51];

struct	Record
{
	struct Record		*PtrComp;
	Enumeration		Discr;
	Enumeration		EnumComp;
	OneToFifty		IntComp;
	String30		StringComp;
};

typedef struct Record 	RecordType;
typedef RecordType *	RecordPtr;
typedef int		boolean;

#define	NULL		0
#define	TRUE		1
#define	FALSE		0

#ifndef REG
#define	REG
#endif

extern Enumeration	Func1();
extern boolean		Func2();

#ifdef TIMES
#include <sys/types.h>
#include <sys/times.h>
#endif

main()
{
	Proc0();
	exit(0);
}

/*
 * Package 1
 */
int		IntGlob;
boolean		BoolGlob;
char		Char1Glob;
char		Char2Glob;
Array1Dim	Array1Glob;
Array2Dim	Array2Glob;
RecordPtr	PtrGlb;
RecordPtr	PtrGlbNext;

Proc0()
{
	OneToFifty		IntLoc1;
	REG OneToFifty		IntLoc2;
	OneToFifty		IntLoc3;
	REG char		CharLoc;
	REG char		CharIndex;
	Enumeration	 	EnumLoc;
	String30		String1Loc;
	String30		String2Loc;
	extern char		*malloc();
	register unsigned int	i;

#ifdef TIME
	long			time();
	long			starttime;
	long			benchtime;
	long			nulltime;

	starttime = time( (long *) 0);
	for (i = 0; i < LOOPS; ++i);
	nulltime = time( (long *) 0) - starttime; /* Computes o'head of loop */
#endif
#ifdef TIMES
	time_t			starttime;
	time_t			benchtime;
	time_t			nulltime;
	struct tms		tms;

	times(&tms); starttime = tms.tms_utime;
	for (i = 0; i < LOOPS; ++i);
	times(&tms);
	nulltime = tms.tms_utime - starttime; /* Computes overhead of looping */
#endif

	PtrGlbNext = (RecordPtr) malloc(sizeof(RecordType));
	PtrGlb = (RecordPtr) malloc(sizeof(RecordType));
	PtrGlb->PtrComp = PtrGlbNext;
	PtrGlb->Discr = Ident1;
	PtrGlb->EnumComp = Ident3;
	PtrGlb->IntComp = 40;
	strcpy(PtrGlb->StringComp, "DHRYSTONE PROGRAM, SOME STRING");
#ifndef	GOOF
	strcpy(String1Loc, "DHRYSTONE PROGRAM, 1'ST STRING");	/*GOOF*/
#endif
	Array2Glob[8][7] = 10;	/* Was missing in published program */

/*****************
-- Start Timer --
*****************/
#ifdef TIME
	starttime = time( (long *) 0);
#endif
#ifdef TIMES
	times(&tms); starttime = tms.tms_utime;
#endif
	for (i = 0; i < LOOPS; ++i)
	{

		Proc5();
		Proc4();
		IntLoc1 = 2;
		IntLoc2 = 3;
		strcpy(String2Loc, "DHRYSTONE PROGRAM, 2'ND STRING");
		EnumLoc = Ident2;
		BoolGlob = ! Func2(String1Loc, String2Loc);
		while (IntLoc1 < IntLoc2)
		{
			IntLoc3 = 5 * IntLoc1 - IntLoc2;
			Proc7(IntLoc1, IntLoc2, &IntLoc3);
			++IntLoc1;
		}
		Proc8(Array1Glob, Array2Glob, IntLoc1, IntLoc3);
		Proc1(PtrGlb);
		for (CharIndex = 'A'; CharIndex <= Char2Glob; ++CharIndex)
			if (EnumLoc == Func1(CharIndex, 'C'))
				Proc6(Ident1, &EnumLoc);
		IntLoc3 = IntLoc2 * IntLoc1;
		IntLoc2 = IntLoc3 / IntLoc1;
		IntLoc2 = 7 * (IntLoc3 - IntLoc2) - IntLoc1;
		Proc2(&IntLoc1);
	}

/*****************
-- Stop Timer --
*****************/

#ifdef TIME
	benchtime = time( (long *) 0) - starttime - nulltime;
	printf("Dhrystone(%s) time for %ld passes = %ld\n",
		Version,
		(long) LOOPS, benchtime);
	printf("This machine benchmarks at %ld dhrystones/second\n",
		((long) LOOPS) / benchtime);
#endif
#ifdef TIMES
	times(&tms);
	benchtime = tms.tms_utime - starttime - nulltime;
	printf("Dhrystone(%s) time for %ld passes = %ld\n",
		Version,
		(long) LOOPS, benchtime/HZ);
	printf("This machine benchmarks at %ld dhrystones/second\n",
		((long) LOOPS) * HZ / benchtime);
#endif

}

Proc1(PtrParIn)
REG RecordPtr	PtrParIn;
{
#define	NextRecord	(*(PtrParIn->PtrComp))

	structassign(NextRecord, *PtrGlb);
	PtrParIn->IntComp = 5;
	NextRecord.IntComp = PtrParIn->IntComp;
	NextRecord.PtrComp = PtrParIn->PtrComp;
	Proc3(NextRecord.PtrComp);
	if (NextRecord.Discr == Ident1)
	{
		NextRecord.IntComp = 6;
		Proc6(PtrParIn->EnumComp, &NextRecord.EnumComp);
		NextRecord.PtrComp = PtrGlb->PtrComp;
		Proc7(NextRecord.IntComp, 10, &NextRecord.IntComp);
	}
	else
		structassign(*PtrParIn, NextRecord);

#undef	NextRecord
}

Proc2(IntParIO)
OneToFifty	*IntParIO;
{
	REG OneToFifty		IntLoc;
	REG Enumeration		EnumLoc;

	IntLoc = *IntParIO + 10;
	for(;;)
	{
		if (Char1Glob == 'A')
		{
			--IntLoc;
			*IntParIO = IntLoc - IntGlob;
			EnumLoc = Ident1;
		}
		if (EnumLoc == Ident1)
			break;
	}
}

Proc3(PtrParOut)
RecordPtr	*PtrParOut;
{
	if (PtrGlb != NULL)
		*PtrParOut = PtrGlb->PtrComp;
	else
		IntGlob = 100;
	Proc7(10, IntGlob, &PtrGlb->IntComp);
}

Proc4()
{
	REG boolean	BoolLoc;

	BoolLoc = Char1Glob == 'A';
	BoolLoc |= BoolGlob;
	Char2Glob = 'B';
}

Proc5()
{
	Char1Glob = 'A';
	BoolGlob = FALSE;
}

extern boolean Func3();

Proc6(EnumParIn, EnumParOut)
REG Enumeration	EnumParIn;
REG Enumeration	*EnumParOut;
{
	*EnumParOut = EnumParIn;
	if (! Func3(EnumParIn) )
		*EnumParOut = Ident4;
	switch (EnumParIn)
	{
	case Ident1:	*EnumParOut = Ident1; break;
	case Ident2:	if (IntGlob > 100) *EnumParOut = Ident1;
			else *EnumParOut = Ident4;
			break;
	case Ident3:	*EnumParOut = Ident2; break;
	case Ident4:	break;
	case Ident5:	*EnumParOut = Ident3;
	}
}

Proc7(IntParI1, IntParI2, IntParOut)
OneToFifty	IntParI1;
OneToFifty	IntParI2;
OneToFifty	*IntParOut;
{
	REG OneToFifty	IntLoc;

	IntLoc = IntParI1 + 2;
	*IntParOut = IntParI2 + IntLoc;
}

Proc8(Array1Par, Array2Par, IntParI1, IntParI2)
Array1Dim	Array1Par;
Array2Dim	Array2Par;
OneToFifty	IntParI1;
OneToFifty	IntParI2;
{
	REG OneToFifty	IntLoc;
	REG OneToFifty	IntIndex;

	IntLoc = IntParI1 + 5;
	Array1Par[IntLoc] = IntParI2;
	Array1Par[IntLoc+1] = Array1Par[IntLoc];
	Array1Par[IntLoc+30] = IntLoc;
	for (IntIndex = IntLoc; IntIndex <= (IntLoc+1); ++IntIndex)
		Array2Par[IntLoc][IntIndex] = IntLoc;
	++Array2Par[IntLoc][IntLoc-1];
	Array2Par[IntLoc+20][IntLoc] = Array1Par[IntLoc];
	IntGlob = 5;
}

Enumeration Func1(CharPar1, CharPar2)
CapitalLetter	CharPar1;
CapitalLetter	CharPar2;
{
	REG CapitalLetter	CharLoc1;
	REG CapitalLetter	CharLoc2;

	CharLoc1 = CharPar1;
	CharLoc2 = CharLoc1;
	if (CharLoc2 != CharPar2)
		return (Ident1);
	else
		return (Ident2);
}

boolean Func2(StrParI1, StrParI2)
String30	StrParI1;
String30	StrParI2;
{
	REG OneToThirty		IntLoc;
	REG CapitalLetter	CharLoc;

	IntLoc = 1;
	while (IntLoc <= 1)
		if (Func1(StrParI1[IntLoc], StrParI2[IntLoc+1]) == Ident1)
		{
			CharLoc = 'A';
			++IntLoc;
		}
	if (CharLoc >= 'W' && CharLoc <= 'Z')
		IntLoc = 7;
	if (CharLoc == 'X')
		return(TRUE);
	else
	{
		if (strcmp(StrParI1, StrParI2) > 0)
		{
			IntLoc += 7;
			return (TRUE);
		}
		else
			return (FALSE);
	}
}

boolean Func3(EnumParIn)
REG Enumeration	EnumParIn;
{
	REG Enumeration	EnumLoc;

	EnumLoc = EnumParIn;
	if (EnumLoc == Ident3) return (TRUE);
	return (FALSE);
}

#ifdef	NOSTRUCTASSIGN
memcpy(d, s, l)
register char	*d;
register char	*s;
register int	l;
{
	while (l--) *d++ = *s++;
}
#endif
SHAR_EOF
fi
if test -f 'database.doc'
then
	echo shar: "will not over-write existing file 'database.doc'"
else
cat << \SHAR_EOF > 'database.doc'
The file "dry.db" is the DHRYSTONE 1.1 benchmark results
in Venturcom's "Prelude" database format.  This format can be
manipulated on UNIX systems which have the Prelude database
manager, or it can easily be manipulated by "awk" scripts.

The format consists of two lines of table header information,
followed by rows of table data.  The header lines indicate the
column names.  The column information is separated by a single
ASCII tab character.

I hope this format is more useful than the old hand editted format.
With this posting, I am no longer accepting or reporting DHRYSTONE
1.0 benchmark results.  Only those results which are from DHRYSTONE
1.1 and mailed to me on the standard form (see the announcement in
net.arch or net.micro) will be accepted.
SHAR_EOF
fi
if test -f 'dry.db'
then
	echo shar: "will not over-write existing file 'dry.db'"
else
cat << \SHAR_EOF > 'dry.db'
MANUF:t	MODEL:t	PROC:t	CLOCK:f	OS:t	OVERSION:t	COMPILER:t	CVERSION:t	OPTIONS:t	NOREG:i	REG:i	NOTES:t	DATE:t	SUBMITTER:t
-	-	-	-	-	-	-	-	-	-	-	-	-	-
Apple	IIe	65C02	1.02	DOS	3.3	Aztec CII	v1.05i		37	37		3/3/86	meccts!ahby (Shane McCarron)
Home Brew		Z80	4	CPM-80		Hisoft C++			53	53		4/10/86	blade.me.brunel.ac.uk!andrew (Andrew Findlay)
Home Brew		Z80	2.5	CPM-80	2.2	Aztec CII	1.05g		91	91		2/24/86	faraday.ECE.CMU.EDU!dan (Dan Nydick)
Home Brew		8086	8	iRMX-86	V6	Intel C-86	2.0	large	197	203	??	3/14/86	mcvax!stc!pete (Peter Kendell)
SSB	Chieftan	6809	2	OS/9 Level II	1.2	Microware			210	249		4/11/86	uokvax!emjej (James Jones)
IBM	PC/XT	8088	4.77	COHERENT	2.3.43	Mark Williams			259	275		2/22/86	infopro!les (Les Hancock)
Home Brew		8086	8	iRMX 86	V6	Intel C-86	2.0	small	287	304	??		
Fortune	32:16	68000	6	UNIX	V7	cc			346	360		2/20/86	tolerant!leach (Geoff Leach)
DEC	PDP-11/34A	w/FP-11C		UNIX	V7m	cc			406	449		3/3/86	eplunix!ijs (Ishmael Stefanov-Wagner)
Apple	Lisa	68000		UniPlus	Sys V	cc			517	550		4/6/86	darth!plooba!shannon (Marc Shannon)
Apple	Macintosh 512	68000	7.7	Mac ROM		DeSmet			625	625			cs.ubc.cdn!ludemann (Peter Ludemann)
IBM	PC/AT	80286	9.05	XENIX	SCO SVR2.1	cc		large	696	692		4/11/86	reed!omen!caf (Chuck Forsberg)
DEC	VAX-11/750	w/FPA		UNIX	4.2BSD	cc			831	852		3/3/86	eplunix!ijs (Ishmael Stefanov-Wagner)
DataMedia	932	68000	10	UNIX	SYS V	cc			837	888		3/5/86	csi!ggere (Gary Gere)
Plexus	P35	68000	12.5	UNIX	SYS III	cc			835	894		3/3/86	meccts!ahby (Shane McCarron)
Convergent	MiniFrame	68010	10	CTIX	3.2	cc			919	965		4/5/86	adelie!ora!tim (Tim O'Reilly)
Convergent	MiniFrame	68010	10	UNIX	SVR2	cc			933	985		4/5/86	pitt!darth!dehart (Ed DeHart)
AT&T	UNIX PC	68010	10	UNIX	5.0.3	cc			973	1034			
Atari	520ST	68000	8	TOS		Megamax	1.0		1063	1136		4/7/86	megamax!eric (Eric Parker)
Compaq	Compaq II	80286	8	MS-DOS	3.1	Microsoft	3.0	large	1086	1140		3/3/86	meccts!ahby (Shane McCarron)
AT&T	6300 PLUS	80286	6	UNIX	SVR2 vC3	cc			1225	1225		4/1/86	cbuxc!cbgmv!gmv (Mike Vrbanac)
IBM	PC/AT	80286	7.5	Venix/286	SVR2.1	cc	Venturcom 2.2	small	1162	1256		8/11/86	Rick Richardson pcrat!rick
Compaq	Compaq II	80286	8	MS-DOS	3.1	Microsoft	3.0	medium	1190	1282		3/3/86	meccts!ahby (Shane McCarron)
DEC	MicroVAX II			Mach	4.3	cc			1361	1385		2/23/86	wb1.cs.cmu.edu!avie (Avadis Tevanian)
DEC	MicroVAX II			Ultrix-32m	1.1	cc			1385	1399			
Compaq	Compaq II	80286	8	MS-DOS	3.1	Microsoft	3.0	small	1351	1428		3/3/86	meccts!ahby (Shane McCarron)
DEC	VAX 11/780			UNIX	4.2BSD	cc			1417	1441		3/25/86	rdlvax!carande (Richard Carande)
DEC	VAX 11/780	MA780		Mach	4.3	cc			1428	1470		2/23/86	wb1.cs.cmu.edu!avie (Avadis Tevanian)
IBM	PC/AT	80286	9.05	XENIX	SCO SVR2.1	cc		small	1464	1484		4/11/86	reed!omen!caf (Chuck Forsberg)
Apollo	DN330	68020	12.5	Domain/IX		cc	4.08	w/o 020	1504	1504		4/3/86	bambi!mike (Mike)
DEC	VAX 11/780			UNIX	5.0.1	cc	4.1.1.31		1650	1640		2/20/86	solar!eds (E.D.Shultz)
Apollo	DN330	68020	12.5	Domain/IX		cc	4.08	w/ 020	1677	1677		4/3/86	bambi!mike (Mike)
Ridge	32C V1			ROS	3.3	Ridge	(older)		1628	1695		3/5/86	jplgodo!steve (Steve Schlaifer)
Gould	PN6005			UTX	1.1c+	cc			1732	1884		3/6/86	dukebar!ndd (Ned Danieley)
DEC	VAX 11/785			UNITY/VMS	5.2.2	pcc	4.3		2063	2069		5/2/86	mcvax!enstvax!dax (Philippe Dax)
HP	9000-320	68020	16.67	HP/UX	5.02 B 9000/320				2464	2671			
Sun	3/160	68020	16.67	Sun 4.2	3.0A	cc			2946	3246		4/9/86	otto!carl (Carl Shapiro)
ISI	Optimum V	68020	16	UNIX	4.2BSD r3.05	ISI			3245	3391		4/23/86	isieng!karen (Karen Murphy)
IBM	4341-12			Amdahl UTS	V	cc	1.11		3690	3690		5/1/86	cit-vax!newton (Mike Newton)
IBM	4341-12			Amdahl UTS	V	cc	1.11		3910	3910	Mike Newtons "optimzer"	5/1/86	cit-vax!newton (Mike Newton)
ISI	Optimum V	68020	16	UNIX	4.2BSD r3.05	Green Hills	1.8.0		3778	3977		4/23/86	isieng!karen (Karen Murphy)
Celerity	C-1230	NCR uP	10	UNIX	4.2BSD	cc			4155	4360		5/5/86	glacier!mtu!pop (Dave Poplawski)
Gould	PN9080			UTX-32	1.1C	cc			4745	4992		2/22/86	bullwinkle!jqj (J.Q.Johnson)
DEC	VAX 11/784			Mach	4.3	cc			5263	5555	1D on 4P	2/23/86	wb1.cs.cmu.edu!avie (Avadis Tevanian)
IBM	4381-2			VM/SP	3.18	Waterloo	1.2		5681	5681		4/7/86	UCF1VM!WOODRUFF (Mark Woodruff)
DEC	VAX 8600			UNIX	4.3BSD	cc			6329	6423		2/27/86	utah-cs!b-davis (Brad Davis)
IBM	4381-2			Amdahl UTS	V	cc	1.11		6440	6440		5/1/86	cit-vax!newton (Mike Newton)
IBM	4381-2			Amdahl UTS	V	cc	1.11		6850	6850	Mike Newtons "optimizer"	5/1/86	cit-vax!newton (Mike Newton)
Amdahl	5860			UTS	V	cc	1.22		28735	28846		2/23/86	attunix!mjs (Marty Shannon)
IBM	3090/200								31250	31250		2/19/86	bu-cs!bzs (Barry Shein)
Sun	2/120	68010	10	UNIX	4.2BSD	cc		no -O	950	1051		6/9/86	sdcrdcf!alex (Alex Hwang)
Encore	Multimax	32032	10	Umax	4.2 R2.0 or V R1.0	Green Hills			1360	1360		6/13/86	encore!pinocchio!grier (Jim Grier)
Racal	Redac	68010	10	Root	V.2	pcc-2			490	525		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Tadpole	Titan	68010	10	Root	V	pcc			823	882		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Phillips		68000	8	Root	V.2	pcc-2			313	333		6/12/86	mcvax!rootcl!njh (Nigel Horne)
DEC	VAX 11/750			Root	4.2	cc			835	859		6/12/86	mcvax!rootcl!njh (Nigel Horne)
DEC	VAX 11/750			BRL Sys V on 4.2BSD		5bin/cc			836	845		6/12/86	mcvax!rootcl!njh (Nigel Horne)
DEC	PDP 11/44			UNIX	Sys III	cc			884	951		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Plessey	system68	68000	8	Root	V	pcc			408	436		6/12/86	mcvax!rootcl!njh (Nigel Horne)
VT		68000	8	Root	V.2	pcc2			422	451		6/12/86	mcvax!rootcl!njh (Nigel Horne)
IMP	Mentor	68020	16	Root	V.2	pcc-2			2632	2747		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Armstrong		68000		Root	V	pcc			342	363		6/12/86	mcvax!rootcl!njh (Nigel Horne)
benchMark		32016	10	Root	V.2	pcc2			643	673		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Torch	Triple X	68010		Root	V	pcc			578	625		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Sequent	Balance 8000	32032	10	Dynix		cc			1097	1137		6/12/86	mcvax!rootcl!njh (Nigel Horne)
Atari	520/ST	68000	8	TOS		Lattice	3.03.01		446	450		6/19/86	prle2!slavenbg (Gert Slavenburg)
Celerity	1260			UNIX	4.2BSD r3.2				8321	8384		6/27/86	celerity!celit!bobbyo (Bob Ollerton)
Celerity	C1230			UNIX	4.2BSD r3.2				4702	4716		6/27/86	celerity!celit!bobbyo (Bob Ollerton)
Celerity	1200			UNIX	4.2BSD r3.2				3921	3916		6/27/86	celerity!celit!bobbyo (Bob Ollerton)
Siemens	PC-MX2	32016	10	Root	V.2	cc			717	745		7/1/86	mcvax!rootcl!njh (Nigel Horne)
Stride		68010	10	UniStride	SVR2	cc			1164	1252		7/3/86	stride!bruce (Bruce Robertson)
IBM	PC/AT	80286	9	UNIX	Microport SVR2	cc		small	1976	1976		7/12/86	umix!b-tech!zeeff (Jon Zeeff)
ATI	2000	80286	8	UNIX	Microport SVR2	cc		small	2145	2145	0 wait state AT clone	7/16/86	wb6rqn!brian (Brian Lloyd)
ATI	2000	80286	8	UNIX	Microport SVR2	cc		large	1440	1440	0 wait state AT clone	7/16/86	wb6rqn!brian (Brian Lloyd)
NCR	PC-8	80286	8	XENIX	SCO SVR2.0.4	cc		small	1283	1299		7/30/86	unido!tub!net (Oliver Laumann)
NCR	PC-8	80286	8	XENIX	SCO SVR2.0.4	cc		middle	981	983		7/30/86	unido!tub!net (Oliver Laumann)
NCR	PC-8	80286	8	XENIX	SCO SVR2.0.4	cc		large	653	649		7/30/86	unido!tub!net (Oliver Laumann)
Cromemco	Z2	Z80	4	Cromix	11.26	ccc			127	127		8/5/86	Requested Anonimity
AT&T	3B2/310	32100		UNIX	SVR2.4	cc			668	671		8/5/86	Requested Anonimity
DEC	PDP-11/73	J-ll,w/FPA		UNIX	2.9BSD	cc			772	875		8/5/86	Requested Anonimity
Sun	2/120	68010	10	UNIX	Sun 2.2	cc			1058	1142		8/5/86	Requested Anonymity
Pyramid	90x	XBIF	8	OSx	3.1	CLE	3.2.0		1779	1779		8/5/86	Requested Anonymity
Counterpoint		68020	12	UNIX	SV	cc			1702	1850		8/5/86	Requested Anonymity
Sun	3/50	68020	15	UNIX	Sun 3.0	cc			2280	2540		8/5/86	Requested Anonymity
Pyramid	90x	DCU	8	OSx	3.1	CLE	3.2.0		2898	2898		8/5/86	Requested Anonymity
Sun	3/160	68020	16.67	UNIX	Sun 3.0	cc		-fsoft	2921	3229		8/5/86	Requested Anonymity
Sun	3/160	68020	16.67	UNIX	Sun 3.0	cc		-f68881	2949	3236		8/5/86	Requested Anonymity
ISI	Optimum	68020	16.67	UNIX	ISI 3.0.1	cc			3074	3452		8/5/86	Requested Anonymity
Pyramid	Workcenter	DCU	10	OSx	3.1	CLE	3.2.0		3627	3627		8/5/86	Requested Anonymity
Pyramid	98xe	DCU	10	OSx	3.1	CLE	3.2.0		3627	3627		8/5/86	Requested Anonymity
Pyramid	98X	DCU	10	OSx	3.1	CLE	3.2.0		3671	3671		8/5/86	Requested Anonymity
Pyramid	98xe	DCU,FPA	10	OSx	3.1	CLE	3.2.0		3773	3773		8/5/86	Requested Anonymity
Pyramid	98X	DCU,FPA	10	OSx		CLE	3.2.0		3856	3856		8/5/86	Requested Anonymity
AT&T	3B2/300	32000	7.2	UNIX	SVR2.0.4	cc			685	688		8/5/86	unirot!halloran (Bob Halloran)
AT&T	3B2/400	32100	10	UNIX	SVR2.0.4	cc			1108	1120		8/5/86	unirot!halloran (Bob Halloran)
AT&T	3B2/300	32000	7.2	UNIX	SVR2.0	cc			409	410		8/5/86	mcvax!steven (Steven Pemberton)
IBM	PC/XT	8088	4.77	MS-DOS	2.0	Microsoft	3.01		326	347		8/5/86	mcvax!steven (Steven Pemberton)
	Gridcase 3	80C86	4.77	MS-DOS	2.11	Microsoft	3.01		409	438		8/5/86	mcvax!steven (Steven Pemberton)
Apricot	portable	8086	5	MS-DOS	2.11	Microsoft	3.01		375	400		8/5/86	mcvax!steven (Steven Pemberton)
Whitechapel	MG1	32016	8	UNIX	4.2BSD	cc			636	675		8/5/86	mcvax!steven (Steven Pemberton)
DEC	VAX 11/780			UNIX	4.2BSD	cc			1243	1307		8/3/86	bgsuvax!gruber (John Gruber)
DEC	VAX 11/785			UNIX	4.2BSD	cc			1783	1813		8/3/86	bgsuvax!gruber (John Gruber)
DEC	2060			TOPS 20		pcc			1677	1736		8/3/86	bgsuvax!gruber (John Gruber)
IBM	4381-2					c/370			4504	4901		8/3/86	bgsuvax!gruber (John Gruber)
Arete	1100/1200	68020	12	UNIX	SVR2.2	Motorola pcc2			2741	2808		5/4/86	arete!stone (David Stone)
Sun	3/160	68020	16.67	UNIX	Sun 3.0	cc			2843	3134		4/7/86	hoptoad!gnu (John Gilmore)
Sun	1/100U			UNIX	Sun 2.0	cc			957	1029		4/6/86	lll-lcc!tflop!mac (Mike McNamara)
Sun	1/100U			UNIX	Sun 2.0	Greehills			1039	1075		4/6/86	lll-lcc!tflop!mac (Mike McNamara)
NCR	Decision Mate 5	8088	4.77	MS-DOS	2.11	Lattice	2.14	small	166	166		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
NCR	PC4	8088		MS-DOS	2.11	Lattice	2.14	small	212	212		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
NCR	Decision Mate 5	8088	4.77	MS-DOS	2.11	Lattice	3.0g	small	250	250		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
NCR	PC4	8088	4.77	MS-DOS	2.11	Lattice	3.0g	small	322	322		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
NCR	PC6	8088	8	MS-DOS	2.11	Lattice	2.14	small	349	349		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
NCR	PC6	8088	8	MS-DOS	2.11	Lattice	3.0g	small	512	512		4/18/86	ncr-sd!se-sd!cbk (Carl Kuck)
Amiga	1000					Manx	C 2.30a		643	684	32 bit int	4/20/86	iuvax!jec (James Conley)
Amiga	1000					Manx	2.30a		880	915	16 bit int	4/20/86	iuvax!jec (James Conley)
Zilog	8000 model 31	Z8001	6	Zeus	3.21	cc		non-segment	831	878		4/20/86	drilex!dricej (Craig Jackson)
Zilog	8000 model 31	Z8001	6	Zeus	3.21	cc		segmented	727	758		4/20/86	drilex!dricej (Craig Jackson)
IBM	PC/RT	(6150)w/FPA		AIX	SVR1	cc			1537	1660		5/22/86	ukma!david (David Herron)
Sun	2			UNIX	4.2BSD	cc			1034	1110		5/17/86	a.psy.cmu.edu!bader (Miles Bader)
DEC	Micro VAX II			Ultrix	1.1	cc			1379	1394		5/17/86	a.psy.cmu.edu!bader (Miles Bader)
IBM	PC/RT			UNIX	4.2BSD	cc			1333	1510		5/17/86	a.psy.cmu.edu!bader (Miles Bader)
IBM	PC/AT	80286	8	PC-DOS	3.20	Microsoft	4.0		1729	1796		8/11/86	microsof!stevesa
IBM	PC/AT	80286	8	PC-DOS	3.20	Microsoft	4.0	small	2176	2239	w/Cheetah 0 ws memory	8/11/86	microsof!stevesa
HP	9000-500	1 CPU, Rev B	18	HP-UX	5.05	cc			1599	1599		5/11/86	hpfcla!bury (Robert Bury)
HP	9000-500	2 CPUs, Rev B	18	HP-UX	5.05	cc			3020	3020	Two copies run and added	5/11/86	hpfcla!bury (Robert Bury)
HP	9000-500	3 CPUs, Rev B	18	HP-UX	5.05	cc			4140	4140	Three copies run and added	5/11/86	hpfcla!bury (Robert Bury)
AT&T	3B15	32100	14	UNIX	5.2.1	cc			1797	1798		8/19/86	unirot!halloran (Bob Halloran)
AT&T	3B2/300	32000	7.7	UNIX	SVR3.0	cc			699	697		8/20/86	unirot!halloran (Bob Halloran)
Compaq	386	80386	16	PCDOS	3.1	Lattice	3.00H	small	2941	2941		9/16/86	3comvax!Marc_Lavine
Compaq	386	80386	16	PCDOS	3.1	Lattice	3.00H	large	1724	1724		9/16/86	3comvax!Marc_Lavine
Compaq	386	80386	16	PCDOS	3.1	Lattice	3.00H	large data	2000	2000		9/16/86	3comvax!Marc_Lavine
Compaq	386	80386	16	PCDOS	3.1	Lattice	3.00H	large data	2631	2631		9/16/86	3comvax!Marc_Lavine
Victor	Sirius	8088		MSDOS	2.11	Microsoft	3.0	small	357	381		9/26/86	unido!pbinfo!michael (Michael Schmidt)
Victor	Sirius	8088		MSDOS	2.11	Microsoft	3.0	middle	317	335		9/26/86	unido!pbinfo!michael (Michael Schmidt)
Victor	Sirius	8088		MSDOS	2.11	Microsoft	3.0	large	284	295		9/26/86	unido!pbinfo!michael (Michael Schmidt)
MIPS	M/500	R2000	8	UNIX	4.3BSD	cc			8855	10309		10/8/86	mips!mash (John Mashey)
Apple	Mac+	68000	7.8	Mac	3.2	Manx	1.06H		714	769	16 bit int	8/21/86	tekcbi!larryh
Motorola	MVME121	68010	10	Uniflex		cc	1.3:0		820	865	MVME320,050	8/21/86	tekcbi!larryh
GMX	Micro-20	68020	12.5	OS-9	1.2	Microware	2.0		1315	1250		9/4/86	rochester!dibble
National	VR332	32332	15	UNIX	SVR2.2	NSC GNX	2	-O	2851	2851		10/2/86	nsc!curry (Ray Curry)
Celerity	1260-D	1230		4.2 BSD	3.2.50	cc	standard	-O	4010	4045	A 1260-D is a dual-processor 1230	10/15/86	seismo!rick (Rick Adams)
Celerity	1260-D	1230		4.2 BSD	3.2.50	cc	beta test	-O	4046	4061	A 1260-D is a dual-processor 1230	10/15/86	seismo!rick (Rick Adams)
IBM	PC/AT	80286	6 	MS-DOS	3.1	Lattice	3.00h		943	925		10/16/86	bnrmtv!blob (Brian Bechtel)
IBM	PC/AT	80286	6 	MS-DOS	3.1	Lattice	3.00h	-ml (large model)	531	531		10/16/86	bnrmtv!blob (Brian Bechtel)
Gould	PN 9080			UTX	2.0 beta	cc			6024	6340		15 Oct. 1986	utah-cs!peter
National Semiconductor	ICM-3216	32016	10	UNIX	SVR2	cc				2688	Wouldn't run noreg	10-16-86	astroatc!crowley
Motorola	System 1131	MC68020	16.67 	System V	R2V2.2	pcc2 High level Optim and peep Optim	ATT	-O	3246	3257		10/16/86	Brad Holtzinger hplabs!motsj1!bjh
MASSCOMP	5600; 1 CPU	68020/68881	16.67 	RTU	3.0	cc	1.121		4161	4155	TOO LONG	LOST	BAD ENTRY
PRIME	9955			PRIMIX	1.2	CC	4.0-19.4	-OPTIMIZE -HIGH	1633	1633	Primix (Unix) on top of Primos 20.0.4	10/15/86	uw-atm!harry (Harry Edmon)
PRIME	9955			PRIMOS	20.0.4	CC	4.0-19.4	-OPTIMIZE -HIGH	2859	2859	V-mode compiler	10/15/86	uw-atm!harry (Harry Edmon)
PRIME	9955			PRIMOS	20.0.4	CI	4.0-19.4	-32IX	3348	3348	I-mode compiler	10/15/86	uw-atm!harry (Harry Edmon)
PRIME	9955			PRIMOS	20.0.4	CI	4.0-19.4	-32IX -INTRINSIC strcpy	3492	3492		10/15/86	uw-atm!harry (Harry Edmon)
Apple	Macintosh 512E	68000	8 	Mac	Finder 5.1, System 3.2	LightSpeed C	1.02		510	549	with new, 128K ROMs	10/17/86	bnrmtv!blob (Brian Bechtel)
Ridge Computers	Ridge 3200	Proprietary	12	ROS	3.4	rc	2.0	none	6119	6240		Oct 17, 1986	hplabs!ridge!dc (Dave Cornelius)
Apple	Lisa 2/10	68000	5	XENIX	3.0 Priam	cc			505	533		10/21/86	ihnp4!meccts!mecc!sewilco (Scot E. Wilcoxon)
AT&T	3B5	WE32000	10	UNIX	SVR2 5.2.0.1 V2	cc	?	large	578	573		10/22/86	isucs1!davis
DEC	PDP-11/45	?		UNIX	V7M	cc	?	256KB	454	506		10/22/86	isucs1!davis
CCI	Power 5/32	68010	12.5 	Unix	BSD 4.2	cc	?		1135	1192		10/21/86	..!rochester!walden!jjg
OPUS SYSTEMS	Opus 32.16	32016	10	Opus5(UNIX)	2.0v2C2.1	cc	SysV.2.0 Ver 1.5		736	776	hosted on IBM PC/AT	10/26/1986	Greg Woodbury (ggw@ethos.UUCP)
APOLLO	DN330	68020/68881	12.5 	Domain/IX	SR9.5.Bl12	CC	4.58	w/o 020,68881	1934	1934	(Beta OS and Compiler)	10/27/86	decvax!wanginst!apollo!swin (Stan Swiniarski)
APOLLO	DN330	68020/68881	12.5 	Domain/IX	SR9.5.Bl12	CC	4.58	w/020,68881	2046	2046	(Beta OS and Compiler)	10/27/86	decvax!wanginst!apollo!swin (Stan Swiniarski)
APOLLO	DN3000	68020/68881	12.5 	Domain/IX	SR9.5.Bl12	CC	4.58	w/o 020,68881	2481	2481	(Beta OS and Compiler)	10/27/86	decvax!wanginst!apollo!swin (Stan Swiniarski)
APOLLO	DN3000	68020/68881	12.5 	Domain/IX	SR9.5.Bl12	CC	4.58	w/020,68881	2643	2643	(Beta OS and Compiler)	10/27/86	decvax!wanginst!apollo!swin (Stan Swiniarski)
Counterpoint Computers	System 19	68020	16.67 	UNIX	SVR2.2	Motorola pcc2		2270	2481	Single uP; 1-8 possible	11/12/86	castor!ihnp4!hplabs!oblio!kent (Kent Peacock - Counterpoint)
Altos Computer Systems	ACS 68000	68000	8 	UNIX	System III, Altos Release 2.0	cc		--	440	450		10/17/86	pyramid!ntc!olaf (Olaf Kaestner)
Intel	386/24 system 310	80386	16	UNIX	System V.3 beta	rcc	2.01		4725	5089	386 Multibus I w/64KB cache	12/5/86	tomk@intsc.uucp (Tom Kohrs)
Intel	386/24 system 310	80386	16	UNIX	System V.3 beta	greenhills cc	v1.8.2C		6250	6250	386 Multibus I w/64KB cache	12/5/86	tomk@intsc.uucp (Tom Kohrs)
Intel	386/24 system 310	80386	20	UNIX	System V.3 beta	rcc	2.01		5966	6394	386 Multibus I w/64KB cache	Dec 5, 1986	tomk@intsc.uucp (Tom Kohrs)
Intel	386/24 system 310	80386	20	UNIX	System V.3 beta	greenhills cc	v1.8.2C		7810	7810	386 Multibus I w/64KB cache	Dec 5, 1986	tomk@intsc (Tom Kohrs)
Intel	386/20	80386	16	UNIX	SVR3	Green Hills C-386	1.8.2E	none	6995	6677	-O means loop optimize, qed faster NOREG	Sun Dec  7 13:42:36 PST 1986	ihnp4!ghsvax!carl (Carl Rosenberg)
Plessey	Mantra	68010	12	Root	V.2	pcc2			1089	1157		10/21/86	mcvax!root44!root (Nigel Horne)
Hazelwood	Uniquad 1	68008	8	OS-9	1.2	Microware	2.0		243	259		11/05/86	uw-vlsi!eldec!swifty (Steve Swifty)
Commodore	64	6510	1	C64 ROM		C Power	2.9	trim	19	34		12/01/86	prindle@NADC.arpa (Frank Prindle)
Commodore	128	8502	2	C128 ROM		C Power 128		trim	43	68		12/01/86	prindle@NADC.arpa (Frank Prindle)
Sherry	AT	80286	8	MSDOS		MS	3.0	/Ot/AS/Gs/G2		1724		12/03/86	mcvax!uva!schilder (Marius Schilder)
Genisys	AT	80286	10	MSDOS		MS	3.0	/Ot/AS/Gs/G2		2777		12/03/86	mcvax!uva!schilder (Marius Schilder)
Olivetti	m24	8086	8	MSDOS		MS	3.0	/Ot/AS/Gs		847		12/03/86	mcvax!uva!schilder (Marius Schilder)
Olivetti	m24	V30	8	MSDOS		MS	3.0	/Ot/AS/Gs/G0		1086		12/03/86	mcvax!uva!schilder (Marius Schilder)
Olivetti	m24	V30	8	MSDOS		MS	3.0	/Ot/AS/Gs/G1		1111		12/03/86	mcvax!uva!schilder (Marius Schilder)
SHAR_EOF
fi
exit 0
#	End of shell archive

dave@onfcanim.UUCP (02/05/87)

Does it bother anyone else that the dhrystone benchmark is
sometimes (if TIME instead of TIMES is used) based on execution
time of a small number of seconds, measured to the nearest second?

Many of the faster machines execute the benchmark in 10 seconds or less,
giving a result that may have +- 10% error.  Doesn't it then seem silly
to quote "dhrystones" as 4-figure numbers?

If TIME is defined, longer execution times (by a factor of 10 at least)
should be used.

And when TIMES is being used, although much better resolution is
available, we can't tell this by looking at the fractional part
of the elapsed time, since it is always truncated to the nearest
integer.  How about changing the code:

	printf("Dhrystone(%s) time for %ld passes = %ld\n",
		Version,
		(long) LOOPS, benchtime/HZ);

to:

	long hundredths;

	hundredths = (benchtime*100 + HZ/2)/HZ;
	printf("Dhrystone(%s) time for %ld passes = %ld.%02ld\n",
		Version,
		(long) LOOPS, hundredths/100, hundredths%100);

eugene@pioneer.UUCP (02/06/87)

>From: dave@onfcanim.UUCP (Dave Martindale)
>Subject: Re: 01/31/87 Dhrystone Results and Source
>
>Does it bother anyone else that the dhrystone benchmark is
>sometimes (if TIME instead of TIMES is used) based on execution
>time of a small number of seconds, measured to the nearest second?
>
>Many of the faster machines execute the benchmark in 10 seconds or less,
>giving a result that may have +- 10% error.  Doesn't it then seem silly
>to quote "dhrystones" as 4-figure numbers?

This is a problem with any "improving" single-figure of merit.  You can
certainly bring in all the statistical tools you want (you did not use
the word variance or SD), but it won't solve the problem, statistics
won't solve the problem.  We have to go back to a time when it was
believed that measurement was not a statistical issue [I've had rocks
thrown at me when I've said this in the past, and I know their read
this].  So, no, it no longer bothers me.

From the Rock of Ages Home for Retired Hackers:

--eugene miya
  NASA Ames Research Center
  eugene@ames-aurora.ARPA
  "You trust the `reply' command with all those different mailers out there?"
  "Send mail, avoid follow-ups.  If enough, I'll summarize."
  {hplabs,hao,nike,ihnp4,decwrl,allegra,tektronix,menlo70}!ames!aurora!eugene

P.S. Are there any fishermen (fisherhumans) on comp.arch? Does anybody
know where I can get one of those gag fishing rules to measure your fish
longer than they really are?

gemini@homxb.UUCP (02/07/87)

>From: dave@onfcanim.UUCP (Dave Martindale)
>Subject: Re: 01/31/87 Dhrystone Results and Source
>
>Does it bother anyone else that the dhrystone benchmark is
>sometimes (if TIME instead of TIMES is used) based on execution
>time of a small number of seconds, measured to the nearest second?
>
>Many of the faster machines execute the benchmark in 10 seconds or less,
>giving a result that may have +- 10% error.  Doesn't it then seem silly
>to quote "dhrystones" as 4-figure numbers?

The TIME define is only for use when a machine doesn't have TIMES, which
isn't many machines (mostly non-UNIX ones).  The instructions say to
use 500000 loops (instead of 50000) for fast machines.  And the report
of the elapsed time, in whole seconds, is just for the purpose of
determining when you have a 'fast' machine on your hands.  The actual
calculation of the figure of merit is done using the granularity
of the TIMES (or TIME) system call.

If this program didn't have to run on so many different OS's, I'd
consider rummaging around and configuring it for the environment.
But since it has to run on DOS, UNIX, VMS, ad nauseum, it'll just
have to be up to the intelligence of the benchmarker to follow the
instructions.

Besides, anybody who quibbles over a 10% difference isn't looking
at the whole picture when selecting a machine.  Dhrystones just
get you looking at the right performance arena.  Other factors
(software, support, migration path, etc.) will get you to the
final decision.

Hypothetical discussion:
Mgr:	"the VAX 8600 and IBM 4381-2 turn about 6000 'stones,
	which should we buy?"
MISmgr:	"Well, i've got IBM stock, get the IBM"
Engin:	"Well, we have 4 zillion lines of code for the 11/780, lets
	get the 8600".

Rick Richardson, PC Research, Inc. (201) 922-1134, (201) 834-1378 @ AT&T-CP
..!ihnp4!castor!{rer,pcrat!rer} <--Replies to here, not to homxb!gemini, please.

jbs@mit-eddie.UUCP (02/08/87)

In article <2366@homxb.UUCP> gemini@homxb.UUCP (Rick Richardson) writes:
>Hypothetical discussion:
>Mgr:	"the VAX 8600 and IBM 4381-2 turn about 6000 'stones,
>	which should we buy?"
>MISmgr:	"Well, i've got IBM stock, get the IBM"
>Engin:	"Well, we have 4 zillion lines of code for the 11/780, lets
>	get the 8600".

And which one do you think they bought? :-)

Jeff Siegal

mash@mips.UUCP (02/09/87)

In article <2366@homxb.UUCP> gemini@homxb.UUCP (Rick Richardson) writes:
...TIME, TIMES, Dhrystone accuracy, etc....
>
>Besides, anybody who quibbles over a 10% difference isn't looking
>at the whole picture when selecting a machine.  Dhrystones just
>get you looking at the right performance arena.  Other factors
>(software, support, migration path, etc.) will get you to the
>final decision.

1) This seems like a reasonable answer, which is in agreement with Gene
Miya's adverse comments on ANY single figure of merit. [That's why we
end up publishing a Performance Brief that's pretty large, to include
enough different benchmarks and explanations to have even a chance of
meaning anything.]

2) I'd generally consider Dhrystone to have about a single digit of accuracy.
In particular, there are all sorts of anomalies with regard to heavily-cached
machines, and the rules regarding allowable optimizations.  For example,
on "realistic" integer benchmarks, our "5MIPS" M/500s are about 20%
faster than a "4MIPS" VAX 8600, and many hours of working on both says
this is consistent, although the Dhrystone numbers would claim the M/500
(somewhere in the 10-12,000 range, depending on exactly what optimizations
are/aren't allowed for consistency) is 1.7X to 1.9X the 8600's 6000-7000.
I'd strongly expect that Dhrystone often overstates the performance of
some micros relative to superminis: for example, Intergraph's recently
published numbers for it's 30Mhz Clipper box include about 8300 Dhrystones,
making it look faster than the 8600, even though it was somewhat/substantially
slower on any of the more realistic benchmarks that they showed.

3) As Rick has always maintained, things like Dhrystone [or Whetstone,
or Linpack, or...] are just a starting point.  However, as it stands,
Dhrystone is the only integer benchmark of any size whatsoever
[since things like Ackerman's function, sieve, etc are way too small
to be good predictors of anything] that is commonly cited and collected.
Maybe it's time to either create a Dhrystone 2.0, or some other integer
benchmark to get at least 1 figure of merit that's a bit better,
although there is still no substitute for running the real applications.

4) How about some suggestions for ways to improve Dhrystone?
(This is not necessarily an attempt to make it "perfect" (no such thing) or
even necessarily a good model for operations statistics, but at least to
make some obvious improvements.)
Here are a few suggestions for starters:

a) Eliminate the problems that stop one from using real optimizers.
	As it stands, it is very hard to compare any numbers, since you don't
	know what sorts of optimizations are done.  This is particularly
	handicapping to those of us who have real optimizers, but can't use
	them for the test.  In some cases, if you eliminate the global
	optimizer, you also eliminate optimizations which are included in
	other people's compilers [that don't have separate optimizers],
	so they get the benefit of the techniques.
	Note that real optimizers are much more prevalent than they were when
	Dhrystone was proposed. As Rick says in his Dhrystone notes:

	"To summarize, DHRYSTONES by themselves are not anything more than
	a way to win free beers when arguing 'Box-A versus Box-B' religion.
	They do provide insight into Box-A/Compiler-A versus Box-A/Compiler-B
	comparisons."

	Right now, the best compilers are penalized [10-20%, from our numbers].

b) STRCPY: we've seen strcpy take up to 30% of the execution time.
Does anybody have any real nubmers of real programs on the real usage
patterns for the str* and mem* routines? [Call frequency, distribution
of string sizes, etc]  We suspect that there's more strcpy time than
most real programs.

c) Other areas [much more work]:
	1) Make program bigger to avoid small-cache effects.
	2) Rework overall program behavior to be more like substantial
	programs [we do a lot of statistics-gathering on references,
	instructions frequency, branch counts, function calls, etc, and
	Dhrystone as it sits isn't excpetionally representative.]

Enough: again, no 1 figure-of-merit does it, but let's at least keep this
one in proper perspective [which I think Rick does].
-- 
-john mashey	DISCLAIMER: <generic disclaimer, I speak for me only, etc>
UUCP: 	{decvax,ucbvax,ihnp4}!decwrl!mips!mash, DDD:  	408-720-1700, x253
USPS: 	MIPS Computer Systems, 930 E. Arques, Sunnyvale, CA 94086

news@cit-vax.UUCP (02/09/87)

Organization : California Institute of Technology
Keywords: Benchmark, C, performance measurement, strcpy
From: jon@oddhack.Caltech.Edu (Jon Leech)
Path: oddhack!jon

In article <112@winchester.mips.UUCP> mash@winchester.UUCP (John Mashey) writes:
>b) STRCPY: we've seen strcpy take up to 30% of the execution time.
>Does anybody have any real nubmers of real programs on the real usage
>patterns for the str* and mem* routines? 

	The text editor I maintain (which bears no relationship to any
variant of EMACS, incidentally), runs ~5-10% strcpy on a 4.2 BSD Vax 780,
in average use (according to gprof). Said usage could be reduced by perhaps
2x if I spent the time to clean up the code.

    -- Jon Leech (jon@csvax.caltech.edu || ...seismo!cit-vax!jon)
    Caltech Computer Science Graphics Group
    __@/

bright@dataio.UUCP (02/10/87)

In article <112@winchester.mips.UUCP> mash@winchester.UUCP (John Mashey) writes:
>4) How about some suggestions for ways to improve Dhrystone?

Make the computations 'do something', so that an optimizing compiler
won't simply delete them. The Datalight optimizing C compiler deletes
(correctly) much of Dhrystone, because it determines that many of the
statements cannot serve any useful purpose.

Test the results of the computations so that not only do you know
how fast the benchmark ran, but if the correct result was obtained.
For an example of this, in the Feb 87 Computer Language benchmark
program, they test out the compiler's qsort() function. Unfortunately,
the code to the benchmark program had a bug in it which caused the results
to be rather random. It's simple enough to see if qsort() worked.
Computer Language did its readers a disservice by publishing such stuff.
For instance, with sieve, if you don't get 1899 out, your compiler
blew it.

jgp@moscom.UUCP (02/12/87)

In article <15203@onfcanim.UUCP> dave@onfcanim.UUCP (Dave Martindale) writes:
>Does it bother anyone else that the dhrystone benchmark is
>sometimes (if TIME instead of TIMES is used) based on execution
>time of a small number of seconds, measured to the nearest second?
>
>Many of the faster machines execute the benchmark in 10 seconds or less,
>giving a result that may have +- 10% error.  Doesn't it then seem silly
>to quote "dhrystones" as 4-figure numbers?
>
>If TIME is defined, longer execution times (by a factor of 10 at least)
>should be used.
>
>And when TIMES is being used, although much better resolution is
>available, we can't tell this by looking at the fractional part
>of the elapsed time, since it is always truncated to the nearest
>integer.
The trucated elapsed time is printed but the full time is used for the
dhrystones/second calculation.

There is still a problem on fast machines (esp when TIME is used).  Why
not instist that LOOPS be adjusted to force the benchmark to take about
60 seconds to run.  This could even be done automatically by having the
program time a single loop and then decide what LOOPS needs to be.

Another problem is that the variable used to count to LOOPS is declared
as an unsigned int.  This really should be a long so that fast machines
with 16 bit int's (small model 80?86) can have a hope of being able to
run long enough to get accurate times.  The looping time itself is
factored out of the benchmark so changing it shouldn't affect the actual
dhyrstone/sec measurement.
-- 
Jim Prescott	rochester!moscom!jgp

phr@mit-hermes.UUCP (02/12/87)

Can someone tell me how to get a copy of the Dhrystone benchmarks,
preferably by ftp?  I don't mean the RESULTS of the benchmarks that
are posted here periodically; I mean the program suite itself.  I'd
like to test out a new compiler with it.  Thanks.

eugene@pioneer.UUCP (02/13/87)

Walter Bright says

>(John Mashey) writes:
>>4) How about some suggestions for ways to improve Dhrystone?
>Make the computations 'do something', so that an optimizing compiler
>won't simply delete them. The Datalight optimizing C compiler deletes
>(correctly) much of Dhrystone, because it determines that many of the
>statements cannot serve any useful purpose.

Do something?  Sure
This is called EXPERIMENT CONTROL.  It's really lacking in computer
science (some say sic).  You need to learn about (as well as Weicker,
author of DSTONES), what's called the "Pre-test Condition," the
"Post-Test" Condition, and also during the test.  You want to set
something up called a CONTROL or CONTROL condition for comparison
purposes.  Pre-test conditions include flushing caches or page tables
before hand.  During test: avoid repetition, especially on machines
which page.  Repeating a section of code just because the clock is poor
is not representative of the true running time of a machine, after the
first repetition, your page tables are pre-filled and are not
representative of the real running conditions of the machine.

Another thing: take a chuck of code (we can control it later), throw the
test section inside this chunk compare the two conditions.

>QSORT example.

Good example but consider how pattern of data access can effect the
performance of a sort.  My suggestion is perform at least three cases
(if not more) in data sorting. 1) Random case, 2) case of already sorted
arrays [minimum comparison and fetching], and 3) inversely ordered
arrays.  You might also have separate worst case data patterns depending
on algorithm type (QSORT in this case).  Don't be surpised at what you get.

I have references to some good simple books on experiment control (not
computer science texts] as well as several papers [surprise: some of
the best are from IBM].

From the Rock of Ages Home for Retired Hackers:

--eugene miya
  NASA Ames Research Center
  eugene@ames-aurora.ARPA
  "You trust the `reply' command with all those different mailers out there?"
  "Send mail, avoid follow-ups.  If enough, I'll summarize."
  {hplabs,hao,nike,ihnp4,decwrl,allegra,tektronix,menlo70}!ames!aurora!eugene

reiter@endor.UUCP (02/13/87)

Has anyone actually tried to evaluate the Dhrystone (and other benchmarks)
by seeing how well it predicts performance on real applications?  It would
seem straightforward to take ten random applications running on specific test
data, measure their performance on some target machine/compiler combinations,
and statistically analyze how much of the peformance differences had been
predicted by the Dhrystone figures.

The debate on flaws of the Dhrystone is quite interesting, but it would be nice
to have some real data on how good or bad the Dhrystone was.  I'm not even sure
that a good benchmark is possible in principle - that is, I wonder whether
it is possible to come up with a single number which can predict
(with any reasonable accuracy) performance on a range of different
applications.

					Ehud Reiter
					reiter@harvard	(ARPA,UUCP,BITNET)

rcd@ico.UUCP (02/14/87)

(into the nest of replies we go...)
In article <319@ames.UUCP>, eugene@pioneer.arpa (Eugene Miya N.) writes:
> Walter Bright says
> >(John Mashey) writes:
> >>4) How about some suggestions for ways to improve Dhrystone?
> >Make the computations 'do something', so that an optimizing compiler...

Fair 'nuff...but how do you achieve that?  You're not particularly likely
to feel that you've got any control over which code the compiler will keep
or throw out until you introduce some external data files.  After all, if
the program doesn't do any operations dependent on the world outside
itself, the ultimate optimization is going to be just to figure out the
whole program at compile time and produce, as object code, the calls to
printf.

[Digression intended for software philosophers:  If the program contains
calls to routines like time() or times(), doesn't that imply that the
entire program is being executed for a side effect (of passing time) and
hence that a <correct> optimizing compiler cannot elide <any> statements?
But where does one draw the line between "necessary" and "unnecessary"
statements?  I suspect that with increasingly clever optimizers, if they
were to come into existence, one would simply have to stop attempting to
reduce the performance of an entire computer system to a single number and,
instead, think about evaluating the system.  But, as I said, I digress...]

Miya continues, about testing methodology and controls:
> ...During test: avoid repetition, especially on machines
> which page.  Repeating a section of code just because the clock is poor
> is not representative of the true running time of a machine, after the
> first repetition, your page tables are pre-filled and are not
> representative of the real running conditions of the machine.

This is at once astute and perverse!  Of course, machines which must page
during the execution of a program will show poorer performance than those
which need not.  But are we measuring the performance of the memory-manage-
ment system as well?  (I suggest strongly that <some> measure need be made,
but I don't see that it can be realistically incorporated into Dhrystone.)
There's another side to trying to fault (sic) the paging machine--it may
do <less> disk activity in bringing in its code, since it need not bring it
all in...and yes, programs which don't use all of their code in any given
execution are quite common.

But the perversity of the recommendation to avoid repetition is this:
Paging systems are built, and work for many problems, based on the correct
observation that most code spends most of its time in a few small locales
withing the total code space.  If a benchmark were to "avoid repetition",
it would in fact be a very poor benchmark since it would fail to be a use-
ful abstraction of real programs.
-- 
Dick Dunn    {hao,nbires,cbosgd}!ico!rcd	(303)449-2870
   ...If you plant ice, you're gonna harvest wind.

gemini@homxb.UUCP (02/15/87)

In article <1224@husc6.UUCP>, reiter@endor.harvard.edu (Ehud Reiter) writes:
> Has anyone actually tried to evaluate the Dhrystone (and other benchmarks)
> by seeing how well it predicts performance on real applications?  It would
> seem straightforward to take ten random applications running on specific test
> data, measure their performance on some target machine/compiler combinations,
> and statistically analyze how much of the peformance differences had been
> predicted by the Dhrystone figures.

Since Dhrystone does no I/O during the benchmark, I doubt that Dhrystone
predicts performance of *ANY* application.  Except perhaps other integer
benchmarks!  It's probably useful in predicting the performance of,
say, qsort(3), UNIX's in core sort routine, and stuff like that.  We've
found it most useful in evaluating compiler code generation technology.

Rick Richardson, PC Research, Inc. (201) 922-1134, (201) 834-1378 @ AT&T-CP
..!ihnp4!castor!{rer,pcrat!rer} <--Replies to here, not to homxb!gemini, please.

mash@mips.UUCP (02/16/87)

In article <1224@husc6.UUCP> reiter@harvard.UUCP (Ehud Reiter) writes:
>Has anyone actually tried to evaluate the Dhrystone (and other benchmarks)
>by seeing how well it predicts performance on real applications?  It would
>seem straightforward to take ten random applications running on specific test
>data, measure their performance on some target machine/compiler combinations,
>and statistically analyze how much of the peformance differences had been
>predicted by the Dhrystone figures.
1) There's probably an interesting M.S. thesis in here somewhere.
>
>The debate on flaws of the Dhrystone is quite interesting, but it would be nice
>to have some real data on how good or bad the Dhrystone was.  I'm not even sure
>that a good benchmark is possible in principle - that is, I wonder whether
>it is possible to come up with a single number which can predict
>(with any reasonable accuracy) performance on a range of different
>applications.

2) Most people I know don't believe very much in single-number performance
metrics.

3) Althought I raised this issue in the first place, there do appear to
be a few applications that grossly correlate [and I mean grossly]
with Dhrystone, i.e., if you saw the Performance Brief I posted here a
few months ago, there was actually a reasonable correlation of it with
things like grep/diff/yacc/nroff, i.e., integer user-level programs of
moderate [but not huge] size, although it sometimes overstated the performance
of small-cached micros versus superminis.  This effect is typical of small
benchmarks: if it fits into the cache, you get something that correlates
a bit better with raw CPU/cache speed; the more it doesn't fit, the more
you're measuring cache-main-memory performance.
-- 
-john mashey	DISCLAIMER: <generic disclaimer, I speak for me only, etc>
UUCP: 	{decvax,ucbvax,ihnp4}!decwrl!mips!mash, DDD:  	408-720-1700, x253
USPS: 	MIPS Computer Systems, 930 E. Arques, Sunnyvale, CA 94086

sbanner1@uvicctr.UUCP (02/16/87)

In article <589@ico.UUCP> rcd@ico.UUCP (Dick Dunn) writes:
>(into the nest of replies we go...)
>In article <319@ames.UUCP>, eugene@pioneer.arpa (Eugene Miya N.) writes:
>> Walter Bright says
>> >(John Mashey) writes:
>> >>4) How about some suggestions for ways to improve Dhrystone?

>                             one would simply have to stop attempting to
>reduce the performance of an entire computer system to a single number and,
>instead, think about evaluating the system.  But, as I said, I digress...]

I have been reading this series of articles with great intrest, as one
of my pet projects is to write a program that will run a whole series
of benchmarks on the given machine, and then compare the results with
similar runs on whatever machines you have data for, then give some sort
of "estimate" of the "power" of the machine relative to the others (or
some sort of absolute measure, though I don't see how that is really
possible), in various areas (a Cray1 is 1000000 times better than an
IBM PC for numerical work, etc... :-).  So, does anyone have any suggestions?
Do you have benchmarks that you use (I have Dhrystone, Whetstone, and
the Sieve (though I understand that there is some sort of standard for
the Sieve, and mine is just what I whipped up; so if there is a standard
for that I would verry much hearing about it, though by mail would be
best I am sure)), that you would be willing to share?  What do you think
are the major requirements for benchmark (requirements in general, or
with respect to your given field)?

  I would like to hear everyones comments on this, but I don't know just
how interested everyone else is, so if you have comment that you don't
want to post to the net (because you don't think people will be interested,
or whatever), feel free to mail direct to me.  Depending on the type
of response I get, I will summarise what people have to say.

                  Thanks,

                      S. John Banner

PS. When I say I am interested in benchmarks of all types, I do mean exactly
that.  My interest started as an interest in comparing various IBM PC
clones, and hardware, and I would be interested in stuff which would
demonstrate differences between the BIOS in one machine vs. another,
or things that are specific to other machines, even though I might not
be able to use them directly.    Thanks,   sjb.

...!{uw-beaver,ubc-vision}!uvicctr!sbanner1
ccsjb@uvvm
sbanner1@uvunix.UVIC.CDN

#1 1121 Fort St.
Victoria BC.
Canada
V8V 3K9

bcase@amdcad.UUCP (02/16/87)

In article <2387@homxb.UUCP> gemini@homxb.UUCP (Rick Richardson) writes:
>In article <1224@husc6.UUCP>, reiter@endor.harvard.edu (Ehud Reiter) writes:
>> Has anyone actually tried to evaluate the Dhrystone (and other benchmarks)
>> by seeing how well it predicts performance on real applications?  It would
>> seem straightforward to take ten random applications running on specific test
>> data, measure their performance on some target machine/compiler combinations,
>> and statistically analyze how much of the peformance differences had been
>> predicted by the Dhrystone figures.
>
>Since Dhrystone does no I/O during the benchmark, I doubt that Dhrystone
>predicts performance of *ANY* application.  Except perhaps other integer
>benchmarks!  It's probably useful in predicting the performance of,
>say, qsort(3), UNIX's in core sort routine, and stuff like that.  We've
>found it most useful in evaluating compiler code generation technology.

Ahhh, now you're talking.  This is one good use of the Dhrystone benchmark.
I (we) have found it tremendously useful in evaluating the effects of
little compiler tweeks.  It is a short program, but it has most of the
constructs that will occur commonly in real programs; thus, an optimization
that affects the run time of dhrystone will probably affect the run time
of a real program in a similar way.  This does not mean that dhrystone
will predict the absolute performance of that real program, but it can
predict the relative performance of the two versions (one with the tweek
one without) of that real program.

    bcase
-----------
Watch this space!

johnw@astroatc.UUCP (02/18/87)

No, it is not possible to get a single figure of merit benchmark!

IBM has realized this for years and almost always quotes separate
comparison figures for "scientific" and "business" code.  Floating
point a side, the IBM-business benchmarks have a higher density of
tests and branches.  (Like Dhrystone, the IBM b-marks are tuned to
try to match sets of real applications)  Given the two IBM-figures,
one can usually make a good guess as to how much performace boost
was achived from a faster clock, and how much was from increased
pipelining.

A Second comment:
I think there's nothing wrong with a "compiler" that "figures out"
what the program does and generates a direct call to "printf" but
if this is used, them it all fairness, I would insist that the
compile time also be included in its timing!!!
--> Are there any times of **COMPILE** time used to compile
	d-stones for each of the machies?!

	(I saw a comparison of Mac compilers, and the slowest produced
	 the fastest running code, but I'd still rather have the
	 fastest compiler, which happened to produce fairly reasonable
	 code too! -- I know it wasn't the slowest code!!!)
	 Anyway, how important is a 2:3 (or 9:10) ratio anyway?????


			John W

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 
Name:	John F. Wardale
UUCP:	... {seismo | harvard | ihnp4} !uwvax!astroatc!johnw
arpa:   astroatc!johnw@rsch.wisc.edu
snail:	5800 Cottage Gr. Rd. ;;; Madison WI 53716
audio:	608-221-9001 eXt 110

To err is human, to really foul up world news requires the net!

stubbs@ncr-sd.UUCP (02/19/87)

Another "problem" with Dhrystone which is also present in Dhampstone
is that since they are single file programs they are subject to
certain optimizations possible for machines with large numbers
of registers such as allocating blocks of registers to procedures,
and a different block of registers to the procedure it calls.

The Stanford MIPS guys are looking at this. But this technique
doesn't work too well on large real programs which either recurse
or are multiple program files compiled separately and then
linked together.

Jan Stubbs    ....sdcsvax!ncr-sd!stubbs
619 485-3052
NCR Corporation
16550 W. Bernardo Drive MS4010
San Diego, CA. 92127

pauls@mips.UUCP (02/20/87)

This is a request that the sender of the original Dhrystone Results
article mail a copy to the following address:
	decwrl!mips!sheryls

Sorry, but the original has already been deleted from our machines.

pauls

bzs@bu-cs.UUCP (03/01/87)

Eugene Miya writes
>You want to set something up called a CONTROL or CONTROL condition for
>comparison purposes.  Pre-test conditions include flushing caches or
>page tables before hand.  During test: avoid repetition, especially on
>machines which page.

Nothing wrong with this, but what's most important is that you agree
on what are the intended methodology and hypotheses.

Yours seems to be that the machines be compared with factors like
caches, page tables and paging performance eliminated.

There's nothing wrong with that. But there's nothing wrong in just
plunking it down in a (reasonably zero-loaded, oops, another
assumption) machine and just seeing how it runs.

For example, I don't often 'ls' a directory twice in succession
because I know the second one will be faster. Some of this may not be
as problematic to the result as it first appears to one accustomed to
purity in controls. It might be reality creeping in.

	-Barry Shein, Boston University