CedarDhrystoneDoc.tioga
Created by Neil Gunther, December 10, 1986 2:11:25 pm PST
Last Edited by: Neil Gunther December 10, 1986 6:19:48 pm PST
CedarDhrystone
CEDAR 6.1 — FOR INTERNAL XEROX USE ONLY
CedarDhrystone
Neil Gunther
© Copyright 1986 Xerox Corporation. All rights reserved.
Abstract: CedarDhrystone is a translation of the popular Dhrystone benchmark written in ADA by Reinhold P. Weicker, CACM 27, No 10, 1984 p. 1013 ff. It exercises the integer operation performance of the processor. The concomitant floating-point benchmark is available in CedarWhetstone.
Created by: Neil Gunther
Maintained by: Neil Gunther <Gunther.pa>
Keywords: Arithmetic, Benchmark
XEROX  Xerox Corporation
   Palo Alto Research Center
   3333 Coyote Hill Road
   Palo Alto, California 94304

For Internal Xerox Use Only
1. The Dhrystone Benchmark
The original program contains statements expressed in a high-level programming language, ADA, in a distribution considered representative, VIZ.
Assignments   53%
Control statements   32%
Procedure 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 meaningful, but it is syntactically and semantically correct. No explicit floating-point operations are invoked (see CedarWhetstoneDoc.tioga).
A table of values (expressed as Dhystones/second) for different hardware, exercised by various C compilers, can be found in DhrystoneTable.tioga.
2. The Cedar Implementation
An effort has been made to preserve the intent behind the original ADA version of the benchmark and not to write a piece of supercharged Cedar code.
The salient Cedar modifications to the original code are:
1. RecordType is not written as a variant record.
Variant records are safe storage antagonists.
2. Use of Ropes rather than RefText or PACKED ARRAYs.
This permits straightforward assignment statements. Tests have shown that using Ropes incures no significant overhead in this context.
3. The use of Rope.InlineFetch.
Permits character indexing without any performance penalty.
4. Func3 has been replaced by an INLINE.
Modifies only a few lines of code.
The timing granularity is chosen to be seconds in the original benchmark for 16-bit processors and is the one chosen for this Cedar implementation. This could easily be reworked to use Pulses for greater accuracy. The recommended number of iterations is 50,000.
And now, the envelope please ....
The Dorado
------------------------------------
From: Atkinson.pa
Subject: CedarDhrystone (slightly revised)
To
: Gunther
Cc
: Atkinson

See the comments in the front (under RRA) for what I changed. I added the ability to run it at high priority for repeatable times. I also created a modified version that uses all INLINE routines (stored as InlineDhrystone.mesa). It seems clear that for Dorados the benchmark spends about 30% of its time in procedure call. The Dorado results are:
  1  2  3  4
Cedar 3400 3520 —— ——
Inline 4600 4810 5000 5110
1, 3: normal priority (± 50)
2, 4: high priority (± 10)
3, 4: bounds & NIL checking disabled
------------------------------------
The DLion
Normal  490
Fast  540
Fast Inline  715
3. Executing the Benchmark in Cedar
% CedarDhrystone or Dhrystone
will commence execution automatically. All timing is performed internally. In the interest of consistency, no other significant programs should be running at the time the benchmark is performed. The WatchTool is excluded from this caveat since it only consumes about 2% of the cpu.
% FastDhrystone
runs the benchmark as a high priority process.