15

According to Wikipedia, John von Neumann proposed the Arithmetic and Logic Unit concept in 1945.

Mathematician John von Neumann proposed the ALU concept in 1945 in a report on the foundations for a new computer called the EDVAC.

If that's so, how did computers earlier than Von Neumann perform data operations without ALU? For example, how did they add numbers?

11
  • 22
    Before von Neumann, computers were designed in a less organized manner, perhaps with more haphazardly interconnections between units, that's all. Proposing the concept of ALU has nothing to do with designing arithmetic circuits. That question can be equated to "how did humans digest food before (whichever ancient/medieval physician) proposed the concept of GI tract"?
    – Leo B.
    Sep 17 at 6:15
  • 4
    Or, rather, out of various blobs of logic comprising a pre-von Neumann computer it would be possible to tell which ones would comprise the ALU in the von Neumann sense.
    – Leo B.
    Sep 17 at 6:27
  • 7
    "ALU" refers to a combinatorial logic circuit whose numeric output depends on two numeric inputs and a function selector input. Like other comments above imply, you can build combinatorial logic that performs one specific math operation without the function selector. Sep 17 at 10:09
  • 3
    A modern example of computation without ALUs is content-addressable memory. Here each RAM cell has comparison logic built-in, allowing for highly parallel searching. It is commonly found in network equipment, every Ethernet switch uses CAM, for example.
    – user71659
    Sep 17 at 19:48
  • 1
    @user71659 Existence of an ALU doesn't imply a load-compute-store structure. ALU - even re the way von Neumann described it - is only about calculating, not about where the operand(s) are coming from nor where or in what form the result is used. Or does it? :))
    – Raffzahn
    Sep 17 at 22:01

4 Answers 4

34

What von Neumann proposed was the idea of the ALU as a subsystem of an electronic computer, conceptually separate from the memory and input/output subsystems. The concept of hardware for doing calculations already existed, of course.

Von Neumann's insight was that the division into subsystems, and the concept of a large memory, made it far easier to think about computers, and thus to design them. These ideas seem to have been grasped by most of the people who read his report on the EDVAC, and started a wave of early computer designs. For a typical example, see Wikipedia's article on Maurice Wilkes.

2
  • Zuse had a separate "Rechenwerk" already in 1938 in his Z3. It did floating point arithmetic because that's what his machine was defined to do. I don't think that the concept of separating the arithmetic unit from the memory and the sequence has a lot of merrit. it is imho a very obvious way of splitting up the problem. Sep 19 at 8:58
  • 3
    I think that in computing, and probably in many other fields, there is a strong tendency to attribute a particular idea to a particular individual when in fact the idea might have been gestating in the community for a long while, and all that the named individual did was articulate the idea more clearly, give it a name, emphasise its importance, or (perhaps in this case) communicate it to a US audience. (My classic example of this is Peter Chen with the entity-relationship model.) Sep 19 at 10:26
17

TL;DR:

There seems to be a misconception between ALU as a box in high level discussion about computer structure and 'an' ALU as a concrete implementation of a logic to produce some calculative result.

Calculating devices have been in use for many years before von Neumann but he laid foundation for a terminology about the parts and an abstract description how binary implementation can be build from simple gates.


The Question:

How could early computers perform data operations before John von Neumann proposed the concept of ALU?

  • By using an ALU. After all, von Neumann didn't propose something new but described (and published) what he learned/understood from the EDVAC project and their approach to build a computer.

Von Neumann's point about introducing an ALU (*1) in his 1945 paper "First Draft of a Report on the EDVAC" is to structure a subdivision of a computer system and name the parts. A step important to create a common wording to be used in following sections so he can elaborate on each. The subdivisions were:

  • CA, a central arithmetic part,
  • CC, a central control part,
  • M, the memory,
  • I, the input,
  • O, the output and
  • R, external recording (aka storage)

In addition CA and CC was to be combined into C, and together with M named the 'associative part' - what we may today call a processor.

The basic definition for an ALU was made to cover next to any 'thing' that can produce a result from an input:

enter image description here

(Taken from First Draft of a Report on the EDVAC p.1&2)

Later on he describes how binary numbers (not float) could be constructed and handled by using a simple logic block he called E-Element (*2). While he mentions that the E-Element is similar to what could be done with a triode, he does not go into circuit design but stays throughout the paper on an abstract, mathematical description.


Wikipedia vs. Complex History

[from Wikipedia]

Mathematician John von Neumann proposed the ALU concept in 1945 in a report on the foundations for a new computer called the EDVAC.

Being geared toward (and made by) a popular audience, Wikipedia doesn't always use the most careful wording. In this case the whole sentence and especially the use of 'proposed' might lead readers not firm with this topic into believing that von Neumann developed the ALU as a new idea which others implemented later on. It couldn't be further away from what really happened.

What Was There?

If that's so, how did computers earlier that von Neumann perform data operations without ALU? For example, how did they add numbers?

By using an adder? Which is a type of ALU.

As mentioned, von Neumann's idea about an ALU as distinct building block of a computer system isn't as much about concrete hardware (*3) but theoretical structure. Real world applications have existed way before.

This includes not only 'simple' adders in fixed or plug board configured machines but as well programmable computers. Most clearly to be seen by Konrad Zuse's Z1/Z3. Their designs were made in 1935, a full 10 years before von Neumann published his paper, while the Z3 was operational 4 years before.

The Zuse design features not only all of the building blocks von Neumann proposes - including operating from a central clock but also full fledged floating point on top.

Of course Zuse wasn't the only person to think about computers and in terms like von Neumann. After all, parts and

So What Did Happen?

It's the old story of Publish Or Perish - he who talks first and loudest will be cited and recognized most.

As mentioned in various sources von Neumann did not really create this out of nowhere, but published a summarised version of work developed by others he as been only in involved as part time consultant.

That rather short paper was distribute widely without any restrictions. As a result it was read and redistributed by many scholars. A perfect match for the needs of developers at the time. It's short and self contained nature without going too deep into hardware did of course help as well.

By nature any later description of a computer - all the way of today - is matching his structure, which of course means everyone citing his name to describe it in a single term. An almost classic example of the biblical Matthew Principle.


*1 - He didn't call it ALU either but called it the "Central Arithmetical part" or CA

*2 - Essentially a two input AND with one input inverted.

*3 - Were he goes later on into detail about how to create circuitry he opts for a bit serial design as that's not only the most simple to build, but as well the most basic, covering everything else. His argument was that parallel designs will only yield faster operation.

He sketches all necessary elements for his CA using examples of those E-Elements. Doings o he stays firmly on a descriptive theoretical side.

12
  • 6
    This. Newton proposed the concept of gravity, but that doesn't mean everything was just floating around before that. Sep 18 at 13:56
  • 3
    Feels to me a bit like object oriented programming, which a LOT of even CS students think of synonymously with programming in general even though there are a lot of other ways
    – Hobbamok
    Sep 18 at 14:26
  • You might reread your text, there are missing ends of sentences. "What Was There?" paragraph is not finished. A native english speaker would also be needed to reformulate sentences to follow a more suitable syntax. Sep 19 at 9:20
  • 1
    @PatrickSchlüter That's what we're here for! Btw, calculatory is a word (in my vocabulary, at least).
    – wizzwizz4
    Sep 19 at 17:57
  • Typography note: I like using < sup > tags to do footnotes instead of *1. Sep 19 at 20:08
2

Especially in the mechanical and electromechanical era, it was common for storage units to be combined with computational circuitry. The easiest way to copy the value of a rotating-wheels accumulator directly to a rotating-wheels register would be to first rotate all the wheels of the destination to the zero position, an then rotate the source register ten places and start rotating the destination when the source wheel advanced from 9 to 0 (if the value in the source wheel won't be needed afterward, it can stop advancing once it hits zero). I wouldn't be surprised if some electronic computers carried that principle forward, since trying to directly set the state of a ten-state register would be more difficult than applying the same "clear and advance" strategy.

4
  • My understanding is that that's how the ENIAC operated. Each decimal digit position was represented by 10 flip-flops arranged in a ring, of which only one flip-flop was 'set' at any time. Sep 18 at 1:20
  • @another-dave: I'd understood that they used a ten-flip-flop arrangement, but I don't know whether the received data by being pulsed a certain number of times, or by having discrete "load 0", "load 1", "load 2", etc. wires. With electromechanical devices that didn't need to operate too quickly, however, it was simpler to have an "advance one" solenoid and a "not on zero" switch, than to support direct loading or even direct clearing.
    – supercat
    Sep 18 at 14:53
  • @another-dave: Another related issue would be whether the registers contained internal carry-propagation logic. In a stepper-based system where each register has a "nine advancing to zero" output for each place, and a relay to connect all such outputs and the solenoids to a common bus, circuitry to add a register to another would need to include a latch for each place to indicate whether a carry had occurred, but all carries could be applied en masse at the end of an addition sequence. Not sure that principle would carry over nicely to tubes-based registers.
    – supercat
    Sep 19 at 15:45
  • The Eniac accumulators weren't simple registers: they had the ability to add and subtract autonomously. The Eniac also had a multiply unit and a divide/square root unit. So, the arithmetical capability of the Eniac was decentralized: there was not a single general-purpose arithmetic unit.
    – John Doty
    Sep 19 at 21:10
1

What computers? Before 1945, there were no stored-program electronic digital computers. The ENIAC existed, but that was designed to a completely different architecture, in that 'programming' was accomplished by wiring.

In the ENIAC's case, arithmetic operations were not so very different from existing mechanical techniques - for example, a stream of pulses rotates a gearwheel (mechanical) or a ring-counter (ENIAC). On passing '10' a pulse is sent to the next stage.

The ALU proposal was given in the draft EDVAC Report, written up by Von Neumann from the ideas of Eckert and Mauchley (ENIAC designers) and himself. The Report and related seminars at the Moore School influenced the thinking of other designers, such as Wilkes at Cambridge.

But as mentioned in the other answer, you can do arithmetic without formalizing an ALU. Binary adders were described early on: Shannon on paper (relating switching to boolean algebra), Stibitz's 1937 proof-of-concept with relays, etc.

3
  • 2
    Erm ... a ALU doesn't require a stored program computer - not even a programmable one.
    – Raffzahn
    Sep 17 at 14:32
  • Maybe not, but the concept originated as part of the conceptual design of a stored-program computer. Prior to that, ad-hoc logic was used. Sep 17 at 14:43
  • 3
    Sorry, but that's simply not true. Machines used already years before von Neumann's 1945 paper distinct ALUs. Not at least Zuses series of computers with clear distinctions between control, ALU, memory and I/O - exactly like von Neumann secribed it.
    – Raffzahn
    Sep 17 at 14:49

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .