[net.lang] benchmarks for a variety of languages/processors

mp@mit-eddie.UUCP (Mark Plotnick) (09/21/83)

The following message has been winding its way around the Arpanet...
(if you know anyone at Xerox, ask them for the program sources; Ivy
isn't on the Arpanet).


Date: 19 Sep 83 08:58:48 PDT (Monday)
From: Caro.PA@PARC-MAXC.ARPA
Subject: C,MESA,CEDAR,&c,Benchmarks (long msg)

--------------------------------------------------------
Date: 16 ep 83 13:53:48 PDT
From: mitchell.pa
Subject: Martin Richard's benchmark program (long message)

Martin Richards of the Computer Laboratory, University of Cambridge,
England has written a benchmark program for examining the performance of
language/compiler/machine combinations in executing systems software.
The program emulates the action of a small ("Tripos" like) operating
system in scheduling and executing six tasks: two devices, two device
handlers, a working task, and an idle task.  The input device is driven
by a pseudo-random stream of numbers, and the program terminates after a
given amount of data has been processed.  The total time taken to
execute the program, and the resulting code size are measured.

The program was originally written in BCPL, and was intended as a
measure not only of a machine's performance, but also of the quality of
its BCPL implementation.  Unfortunately, the only specification of the
bencmark is the BCPL source code, thus restricting the implementation
approach which might be taken with other languages.  The benchmark has
now been transcribed into a number of different languages, giving useful
comparisons between their efficiency for systems programming.

We (Jon Gibbons/SDD, Dan Craft/CSL, and I) have translated this same
benchmark to Mesa and Cedar  and have run the programs on Dandelions and
Dorados.  Further, we have measured four versions of the basic program.
One version mirrors the original BCPL closely and uses short (16-bit)
pointers, the second uses 32-bit pointers (to give a better comparison
with VAXen, 370s, 68000s, etc.), the third uses 16-bit pointers and
INLINE procedures (where possible), and the fourth uses 32-bit pointers
and INLINE procedures.

It would be interesting to add SmallTalk and InterLisp-D to these
statistics.  I would like to encourage those groups to translate the
program and measure the results (you can find the Cedar versions in
[Ivy]<Mitchell>Cedar>Benchmark>Benchmark.df).

Here are the statistics for the four versions of the benchmark in Mesa
and Cedar on Dandelions and Dorados:

Machine			Time  Code Size  Language (Compiler): Comments
	   	    (seconds)  (bytes)

Dorado			 1.5	1558	Cedar (4.4): INLINE procs
			 2.0	2014	Cedar (4.4): Long pointers, INLINE procs
			 2.0	1086	Cedar (4.4)
			 2.6	1348	Cedar (4.4): Long pointers
Dandelion		 8	1326	Mesa: INLINE procs
			 8.4	1558	Cedar (4.4): INLINE procs
			10	1052	Mesa
			10	1522	Mesa: Long pointers, INLINE procs
			10.6	1086	Cedar (4.4)
			11.3	2014	Cedar (4.4): Long pointers, INLINE procs
			12	1149	Mesa: Long pointers
			12.7	1348	Cedar (4.4): Long pointers



And, here are the full statistics for the benchmark over a fairly wide
range of languages, compilers, and machines.  The Mesa/Dandelion
combination (i.e., the Xerox Development Environment) does very well: it
is between a VAX 11/780 and a VAX 11/750 in performance and almost a
factor of two better than an 8 MHz MC68000.  It is the absolute winner
in code size.

The table is grouped by machine and the machines are in increasing order
by the fastest benchmark time on a machine.

Machine			Time  Code Size Language (Compiler): Comments
	    	    (seconds)  (bytes)

IBM 3081		 1.2	3272	BCPL
Dorado			 1.5	1558	Cedar (4.4): INLINE procs
			 2.0	2014	Cedar (4.4): Long pointers, INLINE procs
			 2.0	1086	Cedar (4.4)
			 2.6	1348	Cedar (4.4): Long pointers
Inmos S14		 2.3	1168	BCPL (?)
IBM 370/165		 2.7	3272	BCPL
			 4	5100	Algol 68C
			 5	5444	Pascal
VAX 11/780		 7	2324	CERN BCPL
			11	2631	Modula-2 (Hamburg)
			20.6	5140	Modula-2 (Cambridge)
			52	3648	Pascal (DEC)
in compatibility mode	10	2658	BCPL
Dandelion		 8	1326	Mesa: INLINE procs
			 8.4	1558	Cedar (4.4): INLINE procs
			10	1052	Mesa
			10	1522	Mesa: Long pointers, INLINE procs
			10.6	1086	Cedar (4.4)
			11.3	2014	Cedar (4.4): Long pointers, INLINE procs
			12	1149	Mesa: Long pointers
			12.7	1348	Cedar (4.4): Long pointers
GEC 4090		10	N/A	Modula-2
VAX 11/750		12	2324	BCPL (CERN)
			14	2276	C
			19	3732	CLU
			22	3848	BCPL (U. of Kent)
			34	4480	Pascal (Berkeley)
			35	5140	Modula-2 (Cambridge)
in compatibility mode	24	3072	Modula-2
Lilith			13	1800	Modula-2
MC68000 (8MHz)		19	4248	Modula-2
			21	2540	BCPL
			25	3796	CLU
Z8002 (3.9MHz)		20	2560	BCPL
PDP-11/45		21	2658	BCPL
			25	N/A	C
			28	3072	Modula-2
Intel 8086 (2.5 MHz)	27	2376	BCPL
MC6809 (2 MHz)		61	2280	BCPL

--Jim Mitchell

----------------------------------------------------------------