◷ Computing history

Von Neumann architecture: the idea of the stored program

The 1945 First Draft, the 1948 Manchester Baby and EDSAC: how the stored-program computer was born and what the von Neumann bottleneck really is.

Almost every computer we use, from the phone to the server, shares a basic organisation: a memory that holds both data and instructions, and a processor that fetches the instructions one after another and executes them. This organisation is called the von Neumann architecture. The name is partly unfair, as we shall see, but the idea it describes is the true birth certificate of the modern computer.

The problem ENIAC left open

ENIAC was extremely fast at calculating, but changing problems meant rewiring it. Even while it was being built, Eckert, Mauchly and their colleagues were discussing a successor machine, called EDVAC, that would overcome this limit by keeping instructions in the same memory as the numbers.

In 1944 the mathematician John von Neumann, a consultant on several military projects, learned of the work on ENIAC and began taking part in the discussions on the new project.

The 1945 First Draft

In June 1945 von Neumann wrote a document entitled First Draft of a Report on the EDVAC. It was a logical, not an engineering, description of the machine: it defined its parts and how they worked without going into circuit details.

His colleague Herman Goldstine circulated the document with only von Neumann's name as author. The text spread enormously and became the reference for computer designers all over the world. Eckert and Mauchly felt that the ideas were largely the product of collective work and that their own credit had been obscured. The public circulation of the document also had consequences for patents, because it placed in the public domain concepts that might otherwise have been patented. The question of attribution is still debated by historians.

The parts of the computer

The First Draft described a machine made up of:

  • an arithmetic unit, which carries out operations;
  • a control unit, which interprets instructions and coordinates the other parts;
  • a memory, which holds both numbers and instructions, encoded in the same way;
  • input and output devices, to communicate with the outside world.

The document also proposed using the binary system and performing operations one at a time, in sequence, rather than in parallel as in ENIAC. It was a choice in favour of simplicity.

The fundamental cycle

Operation boils down to a cycle that every processor repeats billions of times a second:

repeat:
    fetch the instruction at the address in the program counter
    decode the instruction
    execute the operation, reading or writing memory if needed
    update the program counter

Because instructions sit in memory just like data, a jump instruction can change the value of the program counter and therefore the flow of execution. A program can also read and write other programs: this is what makes compilers, operating systems and loaders possible.

The first real machines

The first computer to run a stored program was not EDVAC, which was completed late, but a small experimental machine built in Manchester.

The Manchester Baby

On 21 June 1948 the Small-Scale Experimental Machine, nicknamed the "Baby", ran its first program. It had been built by Frederic Williams, Tom Kilburn and Geoff Tootill mainly to test a new kind of memory based on cathode-ray tubes, the Williams tube. The first program searched for the highest proper divisor of a number, trying divisions by repeated subtraction. It was a trivial task, but it proved that the architecture worked.

EDSAC

In May 1949, in Cambridge, Maurice Wilkes's group brought EDSAC into operation, a stored-program computer designed to be used routinely by scientists for real calculations. Wilkes and his colleagues also developed one of the first libraries of reusable subroutines, an idea at the heart of modern programming.

The bottleneck

The von Neumann architecture has a structural limit. Processor and memory are linked by a single channel through which both instructions and data pass. If the processor is much faster than the memory, it spends much of its time waiting.

The phrase "von Neumann bottleneck" was made famous by John Backus in his 1977 Turing Award lecture, in which he also criticised the style of programming this architecture encourages.

How it is worked around today

Modern processors use several techniques to ease the problem:

Technique Idea
Cache Fast copies of the most frequently used data, close to the processor
Separate instruction and data caches Two distinct channels at the levels closest to the processor
Prefetching Loading in advance the data likely to be needed
Out-of-order execution Working on other instructions while waiting for memory

Separate caches recall the so-called Harvard architecture, named after the Harvard Mark I calculator, which kept instructions and data on separate media. Many current processors are therefore a hybrid: von Neumann in main memory, Harvard in the first-level caches.

In short

  • The 1945 First Draft, signed only by von Neumann, described a computer with instructions and data in the same memory; the attribution of the ideas is still debated.
  • The Manchester Baby ran the first stored program on 21 June 1948.
  • Maurice Wilkes's EDSAC, operational from 1949, was among the first computers of this kind in regular service.
  • The single channel between processor and memory creates the "bottleneck", eased today with caches and other techniques.
MM
Marco Marzaduri

Marco Marzaduri works in cybersecurity, digital forensics and web development. With degrees in computer science and psychology, he combines technical analysis with an understanding of the human factor.

Read also