CDC 6600

From Computer History Wiki
Jump to: navigation, search


CDC 6600
Manufacturer: Control Data Corporation
Year Announced: September, 1964
Year First Shipped: 1965
Form Factor: mainframe
Word Size: 60 bits
Clock Speed: 10 MHz
Memory Size: 128K words (max)
Memory Speed: 1 µsecond (cycle time)
Physical Address Size: 17 bits
Memory Management: base and bounds
Operating System: SCOPE, KRONOS
Predecessor(s): none
Successor(s): CDC 7600
Price: US$2.4M


The CDC 6600 was an influential early (1964) mainframe computer; the dual-CPU version of the 6600 was denominated as a CDC 6700. It is generally considered the first true supercomputer, three times faster than the IBM 7030 Stretch, the previous 'fastest computer' record-holder; the 6600 held the title from 1965 to 1969.

It was also the first computer to use a superscalar internal architecture (although the term 'superscalar' did not exist at that time). The functional units were not pipelined internally, a refinement that was introduced with the 6600's successor, the CDC 7600.

It used a RISC-like approach, in that instructions were simple, doing only one thing; the instruction set was basically load-store. Instructions took a minimum of three clock ticks.

The CPU did not do any I/O; that was left to a set of ten 'Peripheral Processing Units', which shared access to the main memory (which had a 32-way interleave to maximize throughput).

In addition to the main memory, the 6600 was later upgraded with an 'Extended Core Storage' unit, with a cycle time of 3.2 µseconds, holding up to 2 megawords. This was intended to smooth out the large performance gap in the storage hierarchy between main memory and disk.

The 6600 was built using then-new silicon transistors, and the physical arrangement was designed to minimize conductor lengths, to minimize 'speed of light' delays. All the longer wires in the system were transmission lines, for more reliable operation.

Superscalar details

It had ten independent 'functional units' in the CPU:

  • branch
  • boolean
  • shift
  • long integer add
  • floating point add
  • floating point multiply (two)
  • floating point divide
  • incrementers (two; also performed memory operations)

Each instruction was routed to the appropriate functional unit, which, if idle, could begin executing right away. (For the duplexed functional units, assignment alternated to an idle unit.)

The CPU had to detect all conflicts between two instructions which it was attempting to execute simultanously; this was done in hardware by the 'Unit and Register Reservation Control' (usually called the 'Scoreboard').

It detected and dealt with three kinds of conflicts:

  • First Order Conflict: a conflict which requires the use of the same functional unit (for the ones which were not duplexed), or output register - these were dealt with by stalling instruction processing.
  • Second Order Conflict: a conflict where one operand of an instruction is the output of a previous instruction, which has not yet completed - these were dealt with by not letting the given functional unit start its processing until its input was available.
  • Third Order Conflict: one where an instruction will use as an output register one which is an input to a previous, but as-yet un-started instruction - these are handled by holding the result in the functional unit until it can safely be stored.

Further reading

External links