
Document:         CB16Bit.txt
File Group:       Classic Benchmarks
Creation Date:    9 March 1998
Revision Date:    

Title:            Classic Benchmarks 16 Bit
Keywords:         BENCHMARK PERFORMANCE 16 BITS

Abstract:         This document provides a brief outline of 
                  Dhrystone and Whetstone Benchmarks that have
                  been compiled with 16 bit compilers and gives
                  sample results. The programs are DOS based.

Contributor:      Roy_Longbottom@compuserve.com


CLASSIC BENCHMARKS 16 BIT


Performance of Pentium Pro and Pentium II based PCs is said not to be
that good when executing 16 bit code. Dhrystone and Whetstone
benchmarks have been compiled to provide a means of obtaining some 
measurements.

Sample results are given for a 100 MHz Pentium, a 200 MHz Pentium MMX
and a 200 MHz Pentium Pro.


DHRYSTONE - DHRY1C16.EXE - Results to log file DHRY.TXT

The same version of Dhrystone 1, used in the Classic Benchmark suite,
was compiled via Watcom C/C++ 10.5 with maximum optimisation options
(as used for Classic full optimisation tests). The 16 bit DOS target
was used. Loop variable and counters were changed to LONG so that the
program runs properly on fast computers.

The Large Memory Model, as selected by the compiler, was used.

Results show that a 200 MHz Pentium Pro is only 11% faster than a 100
MHz Pentium and much slower than a 200 MHz Pentium MMX.

An example of disassembled code showed 12 instructions were used in
the 16 bits version compared with 5 instructions at 32 bits, the
latter having far fewer move instructions. 


WHETSTONE C - WHETC16.EXE - Results to log file WHETS.TXT

The Classics Benchmark version was compiled via The Watcom compiler,
again with full optimisation and 16 bit DOS but the Small Memory
Model.

The compiler produces in-line code and mainly executes the code
efficiently in the 16 bit version, the Pentium Pro being faster than
the 200 MHz Pentium, as would be expected.

The benchmark has 3 loops, N1, N2 and N6, carrying out floating point
calculations. N1 and N2 use data in arrays so performance is worse
than the 32 bit version due to different addressing mechanisms.

Loop N7 copies floating point data from one array element to another,
the data being in L1 cache. The 32 bit version uses a series of load
and stores which uses the pipelines efficiently. The 16 bit version
has 6 extra move instructions which probably stall the pipelines.


WHETSTONE BASIC - WHETBAS.EXE - On screen results, no log file

This was compiled using BASCOM (vintage 1982). This compiles
floating point via integer instructions.

Routines using floating point generally comprise MOV instructions and
calls to library functions compiled within the EXE file.

For many of the loops, the Pentium Pro only achieves half the 
performance of the 200 MHz Pentium MMX.


WHETSTONE FORTRAN - WHETPROF.EXE (on screen results)
                and WHETMS5F.EXE (results to log file WHETS.TXT)

With in-line code, loop N6 generally produces the fastest MFLOPS
rating. It comprises 6 floating point instructions in a function.
These FORTRAN compilers do not introduce in-lining, so N6 is
limited by function calls. 

The first version was compiled with PROFORT (1984 vintage) and the
second with Microsoft FORTRAN Version 5.1 (1991). The majority of
tests are again faster than the PPRO on the P200 and a few on the
P100.


1. DHRYSTONE 1

                                              Best 32 bit
                           VAX MIPS  x P100    VAX MIPS

100 MHz Pentium              75.34     1.0       173
200 MHz Pentium MMX         149.29     1.98      352
200 MHz Pentium Pro          83.70     1.11      373


2.  BASCOM BASIC COMPILER                        			

		
100 MHz Pentium			
			
Loop content       MFLOPS     MOPS   x P100
			
N1 floating point    1.24              1.0
N2 floating point    0.73              1.0
N3 if then else               0.96     1.0
N4 fixed point                2.92     1.0
N5 sin,cos etc.               0.15     1.0
N6 floating point    0.53              1.0
N7 assignments                0.80     1.0
N8 exp,sqrt etc.              0.09     1.0
			 
MWIPS                3.81              1.0
			
200 MHz PMMX			
			
N1 floating point    1.36              1.10
N2 floating point    1.58              2.16
N3 if then else               1.83     1.91
N4 fixed point                5.57     1.91
N5 sin,cos etc.               0.33     2.20
N6 floating point    1.11              2.09
N7 assignments                1.63     2.04
N8 exp,sqrt etc.              0.19     2.11

MWIPS                7.90              2.07
			
200 MHz Ppro			
			
N1 floating point    0.83              0.67
N2 floating point    0.89              1.22
N3 if then else               1.12     1.17
N4 fixed point                3.02     1.03
N5 sin,cos etc.               0.24     1.60
N6 floating point    0.61              1.15
N7 assignments                0.84     1.05
N8 exp,sqrt etc.              0.15     1.67
			
MWIPS                4.83              1.27
			
 			
3. PROFORT FORTRAN			

 			
100 MHz Pentium			
			
Loop content       MFLOPS      MOPS   x P100
			
N1 floating point   12.22              1.0
N2 floating point    7.45              1.0
N3 if then else               1.43     1.0
N4 fixed point                6.15     1.0
N5 sin,cos etc.               0.69     1.0
N6 floating point    2.33              1.0
N7 assignments                2.22     1.0
N8 exp,sqrt etc.              0.63     1.0
			
MWIPS               15.66              1.0
			
200 MHz PMMX			
			
N1 floating point   22.24              1.82
N2 floating point    3.98              0.53
N3 if then else               3.20     2.24
N4 fixed point               12.77     2.08
N5 sin,cos etc.               1.47     2.13
N6 floating point    4.68              2.01
N7 assignments                4.61     2.08
N8 exp,sqrt etc.              1.27     2.02
			
MWIPS               30.00              1.92

200 MHz Ppro
			
N1 floating point   19.31              1.58
N2 floating point    9.40              1.26
N3 if then else               2.04     1.42
N4 fixed point               13.71     2.23
N5 sin,cos etc.               1.35     1.96
N6 floating point    2.22              0.95
N7 assignments                2.09     0.94
N8 exp,sqrt etc.              0.94     1.49
			
MWIPS               19.18              1.22


4. MS FORTRAN 5.1                        			

 			
100 MHz Pentium			
			
Loop content       MFLOPS     MOPS   x P100
			
N1 floating point   20.58              1.0
N2 floating point   11.20              1.0
N3 if then else               4.97     1.0
N4 fixed point                3.88     1.0
N5 sin,cos etc.               1.09     1.0
N6 floating point    3.45              1.0
N7 assignments                3.43     1.0
N8 exp,sqrt etc.              0.50     1.0
			 
MWIPS               21.03              1.0
			
200 MHz PMMX			
			
N1 floating point   41.67              2.02
N2 floating point   23.36              2.09
N3 if then else              14.27     2.87
N4 fixed point                8.39     2.16	
N5 sin,cos etc.               2.21     2.02
N6 floating point    7.08              2.05
N7 assignments                7.40     2.16
N8 exp,sqrt etc.              1.04     2.07

MWIPS               44.33              2.11
			
200 MHz Ppro			
			
N1 floating point   38.44              1.87
N2 floating point   13.58              1.21
N3 if then else               4.90     0.98
N4 fixed point                5.08     1.31
N5 sin,cos etc.               1.83     1.67
N6 floating point    3.27              0.95
N7 assignments                5.35     1.56
N8 exp,sqrt etc.              0.91     1.80
			
MWIPS               26.33              1.25
			
 			
5. Watcom C/C++ 10.5 16 bit			
 
			
100 MHz Pentium			
			                            Best 32 bits
Loop content       MFLOPS      MOPS   x P100   MFLOPS/MOPS
			
N1 floating point   12.07              1.0        27.1
N2 floating point    9.65              1.0        17.3
N3 if then else              16.77     1.0        20.0
N4 fixed point               13.55     1.0        16.3
N5 sin,cos etc.               2.33     1.0         2.6
N6 floating point    6.27              1.0        10.2
N7 assignments                5.86     1.0        23.2 
N8 exp,sqrt etc.              1.39     1.0         1.5
			
MWIPS               43.75              1.0        66.2
			
200 MHz PMMX			
			
N1 floating point   24.20              2.01       54.1
N2 floating point   19.31              2.00       34.7
N3 if then else              37.37     2.23       46.2
N4 fixed point               28.40     2.10       34.0
N5 sin,cos etc.               4.69     2.01        5.1
N6 floating point   12.56              2.00       20.3
N7 assignments               11.75     2.00       46.3
N8 exp,sqrt etc.              2.77     1.99        3.0
			
MWIPS               89.34              2.04      134.0

200 MHz Ppro
			
N1 floating point   22.50              1.86       50.3
N2 floating point   21.82              2.26       45.2
N3 if then else              49.79     2.97       20.6
N4 fixed point               78.09     5.76      102.0
N5 sin,cos etc.               4.36     1.87        4.5
N6 floating point   30.69              4.90       31.5
N7 assignments               21.33     3.64      119.0
N8 exp,sqrt etc.              2.72     1.96        2.8
			
MWIPS              144.85              3.31      161.0



