Computer Taxonomies
In 1966[1], Michael Flynn developed a taxonomy of computer systems
based on the notions of streams of instructions and data.
It was his
observation that one could describe, at a very coarse level, the
degree of parallelism of a computer based on these two parameters:
either the instruction or the data stream could be either serial or
parallel.
He begins by defining instruction and data streams:
- Instruction stream
- sequence of instructions performed by machine
- Data stream
- sequence of data called for by instruction stream
(including input and partial results)
His taxonomy divided computers into five classes:
- SISD (Single Instruction Single Data - IBM 704)
- This is the classical computer: it executes a single instruction
at a time, and executes a single operation on the data.
- Confluent SISD (CDC 6600)
- overlap execution of serial instructions.
Instruction decoder is bottleneck (Flynn mentions that it would be
possible to decode multiple instructions per cycle give either more
complex decoder or restrictions on programming practices. This has
happened now...). While Flynn's illustrations show pipelined
execution, he really means more like dedicated CDC-style functional
units.
- SIMD (Single Instruction Multiple Data - ILLIAC IV)
- A single instruction operates on multiple data elements.
- MISD (Multiple Instruction, Single Data)
- Flynn's original definition has fallen from use. Assume high
bandwidth dedicated execution units as in confluent SISD. Now assume
some number of virtual machines dispatching instructions to these
execution units. Hmm, P4 does this....
- MIMD (Multiple Instruction Multiple Data)
- This is the opposite extreme from SISD: a computer system in
which there are several instructions streams operating
simultaneously (and in large part independently), and each of the
instruction streams operating on its own data stream.
As some examples, most computers today present an SISD model to the
programmer, but are implemented as pipelines. Low-end microcontrollers
(like the HC11) are SISD. Crays present an SIMD model in their
vector instructions, but is implemented as pipelines. The Goodyear
Massively Parallel Processor and the Connection Machine (CM-1 and
CM-2) were both SIMD.
A later extension to his classification includes MSIMD computers:
ensembles of multiple SIMD machines.
We also frequently refer to SPMD (Single Program Multiple Data)
machines. In this case the computer itself is actually MIMD, but we
execute copies of a single program on all the nodes. This makes the
problem of managing parallel processing a lot simpler (imagine trying
to program each of Google's 10,000 machines with a different program!).
We can also further subdivide the categories. In particular, there
are a lot of variations on MIMD machines:
- Distributed Memory
- A machine with a pile o' PCs communicating using a fast network.
Clusters meeting this description, typically "Beowulf" clusters
running Linux, have become the dominant model of very high
performance computing today.
- Global Memory
- A with several processors all sharing a common memory using a bus.
In practice, a global memory machine will have cache layers, causing
lots of problems...
We can also consider different ways to program an MIMD machine.
- Message Passing
- Processes do not share memory; instead, they communicate data as
needed by sending a message under programmer control.
- Shared Variable
- Processes communicate by simply reading and writing shared
locations.
Distributed memory is typically associated with message passing, and
shared memory with shared variables - but these associations can be
reversed!
Programming with shared variables is typically easier than programming
with message passing - you can just put the data where you want, and
read it when you want. On the other hand, message passing always has
exactly one process in control of any data element, making debugging
much less difficult (a slightly different statement than easier!).
References
Michael J. Flynn, "Some computer organizations and their
effectiveness," IEEE Transactions on Computers,vol.C-21,no.9, 1972,
pp. 948-960.