PCW Benchmark Tests
In the heyday of personal computers in the 1980s, Personal Computer
World magazine developed a set of BASIC benchmark tests that could be
used to compare the performance of home computers and published the
results for many of the popular home computers of the day.
For many years, a clone of the PCW article was available on a web
page hosted by Geocities and I linked to that page from a number of my
home computer pages. That page has now gone offline, but the page can be
retrieved from the Wayback Machine on
archive.org.
I have created a copy of the page below. I have not spent any time
formatting the page, so the tables are a bit ugly when displayed on the
fixed page widths I use on the site. I wanted to make sure that I
captured the content without having to spend time making the page
pretty. If the table formatting is important to you, best head over to
the
archive.org page.
- - - - - - - - - - - - - - - - - - - - - - - -
- -
Personal Computer World Benchmark Tests
At the dawn of the home computer age, in the early 1980s, virtually all
computers were supplied with a copy of the BASIC programming language
built-in. This was because there was little commercial software
available at first and the hobbyists who tended to buy these computers
were quite happy to fiddle around with their own programs.
Also at this time there was much greater variation in hardware design
than in the current (2004) Wintel PC market which made it difficult to
predict the relative operating speeds of the different models. The US
magazine Kilobaud published a set of standard test programs in 1977 that
could be used on any version of BASIC and would give an idea of how fast
the computer ran. With slight modifications and the addition of an
eighth test these 'benchmark' programs were adopted by the UK magazine
Personal Computer World and all their computer reviews were accompanied
by a list of the benchmark timings.
Since any computer carries out its instructions extremely quickly the
principle was to have it repeat a simple series of instructions a fixed
number of times (normally 1000 times) and time how long this took with a
stopwatch. Each benchmark program should be run several times and the
average time calculated. The time for each benchmark in seconds and the
average for all eight was then listed.
Sometimes slight modifications to the program listings were needed to
suit the particular dialect of BASIC in the computer being tested but
below are listed the benchmarks in outline, together with notes on just
what they are intended to show.
Benchmark 1
20 FOR k=1 TO 1000 40 NEXT k
FOR-NEXT loops are one of the commonest constructs in BASIC and if they
are slow then all programs are likely to be slow.
Benchmark 2
20 LET k=0 30 LET k=k+1 50 IF k<1000 THEN GOTO 30
This has the same effect as benchmark 1 of having the variable k count
from 1 to 1000, but with explicit addition and a jump back. This method
is generally much slower than the optimised FOR-NEXT loop. Notice that
the benchmarks use line numbers and GOTOs. Most BASICs of the period
lacked more sophisticated loop constructs.
Benchmark 3
20 LET k=0 30 LET k=k+1 40 LET a=k/k*k+k-k 50 IF k<1000
THEN GOTO 30
This time some calculations are done inside the loop. This tests the
speed of the arithmetic operators and also of accessing variables. For
the benchmarks all variables are assumed to be of floating-point type.
Benchmark 4
20 LET k=0 30 LET k=k+1 40 LET a=k/2*3+4-5 50 IF k<1000
THEN GOTO 30
The same as benchmark 3 except that constants are used for the
arithmetic instead of a variable. If the code for looking up values of
variables is inefficient then this test will be faster than the previous
one.
Benchmark 5
20 LET k=0 30 LET k=k+1 40 LET a=k/2*3+4-5 45 GOSUB 700
50 IF k<1000 THEN GOTO 30 700 RETURN
This introduces a subroutine call. It requires the return address to be
put on a stack and then the destination of the call to be found, usually
by searching through from the beginning of the program. Long programs in
early versions of BASIC would make extensive use of subroutines and thus
the efficiency of the calling mechanism was important.
Benchmark 6
20 LET k=0 25 DIM m(5) 30 LET k=k+1 40 LET a=k/2*3+4-5
45 GOSUB 700 46 FOR l=1 TO 5 48 NEXT l 50 IF k<1000 THEN GOTO
30 700 RETURN
This defines a small array at the start and adds another FOR-NEXT loop
inside the main loop. This benchmark has little importance on its own
but is used as a baseline for benchmark 7.
Benchmark 7
20 LET k=0 25 DIM m(5) 30 LET k=k+1 40 LET a=k/2*3+4-5
45 GOSUB 700 46 FOR l=1 TO 5 47 LET m(l)=a 48 NEXT l 50 IF
k<1000 THEN GOTO 30 700 RETURN
This assigns a value to each of the array elements every time through
the loop. How much slower this is than benchmark 6 indicates the
efficiency of array access.
Benchmark 8
20 LET k=0 25 DIM m(5) 30 LET k=k+1 40 LET a=k^2 45 LET
b=LN(k) 47 LET c=SIN(k) 50 IF k<1000 THEN GOTO 30
The final benchmark uses the more advanced mathematical functions of
raising to a power (usually implemented using logarithms), calculating
natural logarithms and calculating trigonometric sines.
Since the computer cannot store tables of mathematical functions like
sin(x) and tan(x) it has to calculate them for a particular value of x
as needed. This is done using a polynomial approximation, often
involving Chebyshev polynomials, which requires a long series of
arithmetic operations. Hence the higher mathematical functions tend to
be much slower than simple addition or multiplication. There are various
ways to perform the approximation and some systems trade off accuracy
for speed.
Of course there are many criticisms that can be made of these
benchmarks, particularly from a modern point of view. They are heavily
biased towards arithmetic and internal program structure and make no
attempt to measure such things as the speed of the screen display or
disc access. But it has to be remembered that at the time they were
written many computers had a text only display and no disc drive, and
the main use for computers was perceived to be as very fast calculators
and data processors.
The fact that the benchmark programs are very short means that number 5,
measuring the speed of subroutine calls, is unrealistic. The usual way
that the BASIC interpreter would find the destination of a subroutine
was to look at all the line numbers in turn, starting at the beginning
of the program, until it found the one matching the call. In a program
consisting of hundreds of lines this would obviously take longer than if
the program only had a few lines. Certainly my experience with a
Sinclair Spectrum was that if commonly used subroutines were put near
the beginning of the program rather than the traditional position at the
end, the program would run very noticeably faster.
The benchmark times obviously depend on the speed of the hardware,
mainly the processor, and on the way the BASIC language interpreter is
written, so computers with the same processor could often give markedly
different timings.
Finally the benchmarks only test the running speed of the built-in BASIC
language. Most commercial software (especially games) was either written
in or compiled into machine code before running and thus bypassed the
BASIC interpreter altogether.
Computer magazines still publish benchmark listings but they are much
more complex than the ones listed above. Some may measure a particular
aspect of the computer's hardware, such as the speed of the graphical
display, whilst others try to simulate the normal use of the machine in
running typical programs such as spreadsheets and word processors.
In my opinion the current benchmarks are in their own way just as flawed
as the old Personal Computer World ones. The graphics benchmarks may be
of interest to someone who mainly uses their PC for playing the latest
video games but for more general tasks essentially any modern PC is fast
enough. In fact, despite the emphasis that the reviews put on
differences in performance, it is surprising just how little difference
there is between a mid-range and a top-end PC. In group tests of PCs
there is typically less than a factor of two difference between the
fastest and the slowest. Benchmarks of application software such as word
processors are all very well, but in practice the limiting factor is
likely to be how fast the user can type rather than how fast the
computer is.
Despite these criticisms the old PCW benchmarks probably did serve a
purpose to the hobbyist market who were writing their own programs, and
did demonstrate, as hardware improved from 8-bit to 16-bit then 32-bit
processors and clock speeds increased, just how much faster the machines
got. They also have the advantage that they were simple enough and
general enough that a version of them could be run on almost any
platform, and in programming languages other than BASIC, whereas a test
of the speed of Microsoft Excel for instance can only be run on a PC
with Windows as the operating system.
Some Typical Results
This first table just gives the average time for the eight benchmark
tests on a range of systems. A later table lists the individual results.
The figures have been taken from published reviews plus practical tests
by the author.
The first column gives the computer make and model, the second column
lists the microprocessor type and speed, third is the version of BASIC
used, the fourth column is the average of the benchmark timings and the
final column shows how many times faster than a Sinclair ZX Spectrum
that particular computer is. The Spectrum was one of the best selling
computers of its day and is therefore a useful baseline.
Computer/System |
Processor & Speed |
Language |
Mean Benchmark Time (seconds) - Lower
is better |
Speed relative to ZX Spectrum - Higher
is better |
Sinclair ZX80 |
Z80A / 3.5MHz |
Sinclair BASIC |
14.60 |
3.8 |
Sinclair ZX81 ('Fast' mode) |
Z80A / 3.5MHz |
Sinclair BASIC |
42.80 |
1.3 |
Sinclair Spectrum |
Z80A / 3.5MHz |
Sinclair BASIC |
55.62 |
1.0 |
Acorn BBC B |
6502 / 2MHz |
BBC BASIC |
14.33 |
3.9 |
Commodore 64 |
6510 / 1MHz |
BASIC |
33.11 |
1.7 |
Atari 800XL |
6502 / 2MHz |
BASIC |
25.71 |
2.2 |
Memotech MTX-500 |
Z80A / 4MHz |
MTX BASIC |
19.25 |
2.9 |
Hewlett Packard Integral PC |
MC68000 / 8MHz |
HP BASIC |
11.96 |
4.6 |
ACT Apricot |
8086 / 5MHz |
Microsoft BASIC |
16.68 |
3.3 |
Acorn A3010 |
ARM250 / 12MHz |
BBC BASIC V |
0.47 |
117 |
Windows PC |
Celeron / 2400MHz |
Microsoft QBASIC |
0.047 |
1174 |
Casio CFX-9850G calculator |
Not known |
BASIC-like |
65.30 |
0.85 |
Hewlett-Packard 39g+ calculator |
ARM 9 / 75MHz emulating HP Saturn |
HP-BASIC (compiled) |
77.7 |
0.78 |
MZX Spectrum emulator |
2400MHz Celeron emulating 25MHz ARM3 emulating
3.5MHz Z80A |
Sinclair BASIC |
8.32 |
6.7 |
Virtual A5000 emulator |
2400MHz Celeron emulating 25MHz ARM3 |
BBC BASIC V |
0.025 |
2268 |
FasterPC emulator |
2400MHz Celeron emulating 25MHz ARM3 emulating
8MHz? 80186 |
Microsoft QBASIC |
6.88 |
8.1 |
STEEM Atari ST emulator (standard ST speed) |
2400MHz Celeron emulating 8MHz 68000 |
HiSoft FirST BASIC (compiled) |
0.51 |
110 |
STEEM Atari ST emulator (maximum speed) |
2400MHz Celeron emulating 128MHz 68000 |
HiSoft FirST BASIC (compiled) |
0.049 |
1140 |
Comments on Benchmark Results
The Sinclair ZX80 is several times faster than the Sinclair Spectrum,
even though they share the same processor. This is mainly because the
ZX80 only performed integer arithmetic rather than floating point (which
meant that BM8 could not be tried) and the Z80A microprocessor could do
integer arithmetic directly, whereas floating point calculations had to
be built up from a series of integer operations, rather like doing long
multiplication by hand. Also the implementation of Chebyshev polynomials
in the Spectrum was notoriously slow so that benchmark 8 took a
particularly long time.
The Spectrum is in fact the slowest of the true computers tested. Only
the programmable calculators are slower. The Memotech MTX-500 which also
uses a 4MHz Z80A processor is almost three times faster than a Spectrum.
The Sinclair BASIC in the Spectrum was based on that in the ZX81, with
extra commands added, which was itself derived from the BASIC in the
ZX80.
In the majority of early home computers the BASIC and a rudimentary
operating system were stored in read-only memory (ROM) and they also
required some random-access memory (RAM) as working space. When the ZX80
was launched in 1980 both ROM and RAM were relatively expensive and the
machine had only 4 kilobytes of ROM and 1 kilobyte of RAM. It was a
squeeze to fit a reasonable version of BASIC into the 4K ROM and also
avoid it using up too much of the RAM, which had to be shared with the
user's program and the video display.
As a result the BASIC was written for compactness rather than speed
which meant writing general-purpose sections of code which could be
called one after another to build up a result, where it might have been
possible to write a faster routine if it only had to perform a single
task. This design was carried through into the ZX81 (8K ROM, 1K RAM) and
ZX Spectrum (16K ROM, 16K or 48K RAM) even though by this time memory
prices had dropped sufficiently that it was probably not necessary.
In practice most Spectrums (Spectra?) ended up selling as games machines
and since games were almost invariably written in machine code the
slowness of the BASIC did not matter. In fact the Z80A processor was
probably faster than the 6502 favoured by many of the Spectrum's
competitors.
The Hewlett Packard Integral PC (an early portable) and the ACT Apricot
(an IBM PC clone) were some of the first to use the new 16-bit
microprocessors, the Motorola 68000 and the Intel 8086 respectively.
Since these processors could handle two bytes of data at a time as
opposed to the single byte at a time of the 8-bit processors used by the
earlier machines in the table, and had higher clock speeds, they should
have had a significant speed advantage. The results actually show them
to be little better than the best of the 8-bit machines. Perhaps this is
because the software writers lacked experience with the new processors
and were not able to produce optimised routines.
One thing which stands out from the table is how fast BBC BASIC, as used
in Acorn's range of computers, is. Microsoft's QBASIC running on a
modern PC with a 2.4GHz Intel Celeron processor is exactly 10 times
faster than BBC BASIC running on an Acorn A3010 with a 12MHz ARM250
processor. However the clock speed of the Intel processor is 200 times
higher than that of the ARM processor, so for the same clock speed it
seems that BBC BASIC is really 20 times faster than QBASIC. (And the Q
is for Quick!)
The Casio CFX-9850G is one of the current generation of graphing
calculators and uniquely I think it has a four colour display. With its
32K of memory and a speed almost matching that of the Sinclair Spectrum
it is therefore nearly the equal of a desktop computer of a little over
twenty years ago, in a handheld, battery-powered package and at a
fraction of the cost in real terms.
The Hewlett-Packard programmable calculator, model hp-39g+, is
remarkably slow considering its hardware. It has a 32-bit ARM 9
microprocessor at 75 MHz, which is at least 100 times faster than the
3.5MHz Z80A microprocessor in the Sinclair ZX Spectrum. Also the BASIC
in the calculator is compiled before running whereas the Spectrum's is
interpreted (see below for explanation). Compiling typically gives a
factor of 5 to 10 increase in speed. Overall then the calculator ought
to be several hundred times faster than
the ZX Spectrum, whereas it is actually slightly slower.
One reason is that previous models of the hp-39g calculator used a
completely different design of microprocessor (known as Saturn), and
when Hewlett-Packard replaced this with an ARM 9, rather than rewriting
the operating system to run directly on the ARM processor they created a
Saturn emulator, so that the ARM 9 has to
'pretend' to be a Saturn, and emulators are always inefficient. Even so
it is either a very slow emulator or a very bad compiler for the BASIC
to be so sluggish.
The last few lines in the table give the results for emulators, all
running on a modern PC. An emulator is a program which creates a
software model of the hardware of another computer, including all the
registers in its processor, and this software model can then run the
operating system and programs intended for that computer. Emulators
avoid the need to keep old hardware running.
Generally emulation is considered a slow process because of the need to
convert each instruction in the emulated machine's instruction set into
a series of steps which have the same effect on the modelled hardware,
and to convert the screen display into the totally different format
needed for current computers. In practice though, such is the rate of
increase of microprocessor speeds that emulated versions of computers
from 10 or more years ago may well run faster than the genuine machine.
For example the emulation of an Acorn A5000 computer gives a benchmark
speed around 20 times quicker than an actual Acorn A3010, whereas in
reality it would only have been about 2½ times faster. Again notice that
BBC BASIC under emulation is quicker than QBASIC being run directly on
the same processor.
The result for the MZX emulation of a Sinclair Spectrum is particularly
impressive. This was run by using a 2.4GHz Intel processor to emulate an
Acorn A5000, then the emulated A5000 is in turn emulating a Sinclair
Spectrum. Despite having to go through two levels of emulation this
still manages to be 6 times faster than a real Spectrum. (It is also a
tribute to the accuracy of the emulators that this even works!)
The Atari ST used the same microprocessor as the Hewlett Packard
Integral PC. However in the test where the emulated Atari is running at
approximately the same speed as a genuine ST it still manages to be over
20 times faster than the Hewlett Packard computer. This is because the
BASIC in the HP was interpreted which
means that each BASIC command had to be read, analysed and converted
into the microprocessor's own language every time through the loop.
HiSoft BASIC on the Atari by comparison was a compiled language.
The BASIC commands were converted into microprocessor instructions just
once and stored in this form, then could be executed at full speed. One
of the reasons the BASIC programming language has a poor reputation
amongst professional programmers is that most dialects of it are
interpreted and thus inherently slow.
PCW Benchmark Timings
All timings are in seconds.
Computer/System |
Processor & Speed |
Language |
Year Introduced |
BM1 |
BM2 |
BM3 |
BM4 |
BM5 |
BM6 |
BM7 |
BM8 |
Mean |
Speed relative to ZX Spectrum |
Hewlett Packard Integral PC |
MC68000 / 8MHz |
HP BASIC |
1985 |
1.9 |
3.5 |
6.9 |
7.1 |
8.8 |
18.3 |
27.3 |
21.9 |
12.0 |
4.6 |
ACT Apricot |
8086 / 5MHz |
Microsoft BASIC |
1983 |
1.6 |
5.2 |
10.6 |
11 |
12.4 |
22.9 |
35.4 |
34.4 |
16.7 |
3.3 |
Sinclair ZX80 |
Z80A / 3.5MHz |
Sinclair BASIC |
1980 |
1.5 |
4.7 |
9.2 |
9 |
12.7 |
25.9 |
39.2 |
Not poss |
14.6 |
3.8 |
Sinclair ZX81 ('Fast' mode) |
Z80A / 3.5MHz |
Sinclair BASIC |
1981 |
4.5 |
6.9 |
16.4 |
15.8 |
18.6 |
49.7 |
68.5 |
162 |
42.8 |
1.3 |
Sinclair Spectrum |
Z80A / 3.5MHz |
Sinclair BASIC |
1982 |
4.4 |
8.2 |
20.0 |
19.2 |
23.1 |
53.4 |
77.6 |
239.1 |
55.6 |
1.0 |
Windows PC |
Celeron / 2400MHz |
Microsoft QBASIC |
2003 |
0.007 |
0.011 |
0.024 |
0.024 |
0.025 |
0.072 |
0.096 |
0.120 |
0.047 |
1174 |
Acorn BBC B |
6502 / 2MHz |
BBC BASIC |
1982 |
0.8 |
3.1 |
8.1 |
8.7 |
9.0 |
13.9 |
21.2 |
49.9 |
14.3 |
3.9 |
Commodore 64 |
6510 / 1MHz |
BASIC |
1983 |
1.2 |
9.3 |
17.6 |
19.5 |
21.0 |
29.5 |
47.5 |
119.3 |
33.1 |
1.7 |
Atari 800XL |
6502 / 2MHz |
BASIC |
1984 |
2.2 |
7.3 |
19.7 |
24.1 |
26.3 |
40.3 |
60.1 |
Not done |
25.7 |
2.2 |
Memotech MTX-500 |
Z80A / 4MHz |
MTX BASIC |
1983 |
1.6 |
4.8 |
11.3 |
11.0 |
13.2 |
23.9 |
43.3 |
44.9 |
19.3 |
2.9 |
Acorn A3010 |
ARM250 / 12MHz |
BBC BASIC V |
1993 |
0.04 |
0.15 |
0.37 |
0.33 |
0.35 |
0.66 |
1.04 |
0.85 |
0.47 |
117 |
Casio CFX-9850G calculator |
Not known |
BASIC-like |
2001 |
4.4 |
19.9 |
57.6 |
60.7 |
66.3 |
91.4 |
106.4 |
115.7 |
65.3 |
0.85 |
Hewlett-Packard 39g+ calculator |
ARM 9 / 75MHz emulating a HP Saturn processor |
HP-BASIC (compiled) |
2004 |
1.5 |
18.0 |
38.6 |
37.2 |
45.7 |
58.4 |
292.7 |
81.5 |
71.7 |
0.78 |
MZX Spectrum emulator |
2400MHz Celeron emulating 25MHz ARM3 emulating 3.5MHz Z80A |
Sinclair BASIC |
1994 |
0.67 |
1.24 |
2.99 |
2.94 |
3.73 |
9.3 |
13.4 |
32.3 |
8.32 |
6.7 |
Virtual A5000 emulator |
2400MHz Celeron emulating 25MHz ARM3 |
BBC BASIC V |
2002 |
0.0006 |
0.0076 |
0.02 |
0.01 |
0.011 |
0.038 |
0.053 |
0.056 |
0.025 |
2268 |
FasterPC emulator |
2400MHz Celeron emulating 25MHz ARM3 emulating 8MHz? 80186 |
Microsoft QBASIC |
1994 |
0.92 |
1.43 |
3.35 |
3.54 |
3.4 |
8.7 |
11.7 |
22.0 |
6.88 |
8.1 |
STEEM Atari ST emulator (standard ST speed) |
2400MHz Celeron emulating 8MHz 68000 |
HiSoft FirST BASIC (compiled) |
1985 |
0.06 |
0.07 |
0.21 |
0.27 |
0.3 |
0.6 |
1.12 |
1.43 |
0.51 |
110 |
STEEM Atari ST emulator (maximum speed) |
2400MHz Celeron emulating 128MHz 68000 |
HiSoft FirST BASIC (compiled) |
2002 |
0.0032 |
0.023 |
0.033 |
0.037 |
0.038 |
0.057 |
0.089 |
0.11 |
0.049 |
1140 |
|