What do the terms SIMD, MISD, SISD and MIMD mean?

What do the terms SIMD, MISD, SISD and MIMD mean?

The loop in the following Python code multiplies each number in an array by 5:

>>> a = [3,4,5,6,7]
>>> for i in range(0,len(a)):
...     print(a[i]*5)
... 
15
20
25
30
35

The CPU retrieves each number, one at a time, from the array in memory. It then passes each number to the multiply circuit in the CPU, one at a time, and calculates the answer. This way of processing data is known as SISD or Single Instruction Single Data as each number is processed individually in sequence. There is an alternative way of processing the data though, where several of the numbers in the array are retrieved simultaneously and multiplied all at the same time. This is obviously much faster than performing the multiplications individually, but has the disadvantage of requiring extra multiplication circuitry in the CPU, which is more expensive. CPU features that can work against many data items at once are known as SIMD or Single Instruction Multiple Data. Many modern CPUs have some form of SIMD features.

Vector processing is a very similar concept to SIMD where a computer performs the same operation on many numbers at once. The GPUs found in many PCs for graphics processing commonly work using vector processing, although they may also use other techniques. The difference between vector processing and SIMD is usually held to be that SIMD only operates on a list of numbers of fixed size i.e. perhaps 8 or 16 numbers at once. A vector processor may operate on lists of numbers of variable size.

MIMD means Multiple Instructions Multiple Data. The most common example of this is multi-core CPUs. There are multiple copies of a CPU on a single chip. Each copy of the CPU can work entirely independently, applying different instructions to different data at the same time. Virtually all common CPUs now sold are multi-core and hence have MIMD features.

MISD stands for Multiple Instructions Single Data, which means several CPU instructions working against the same data item at the same time. The way in which this term is applied can vary and is not strictly defined. It can be used to mean high reliability systems where it is absolutely critical that a computer works correctly, such as in safety systems. To achieve high reliability, the entire computer may be duplicated and both copies are fed with exactly the same data at the same time. It is checked that each copy of the machine produces the exact same answer. This is like using two independent calculators side by side on the same sequence of numbers to check they both produce the same result, confirming that each calculator is working correctly.

Sometimes specialist types of CPU that are capable of performing many operations in a sequence are also described as MISD. For example if you imagine a formula such as a * b + c, a conventional CPU would perform the multiplication as one step and then the addition as a completely separate step, requiring two units of time. A MISD machine might be able to do the entire calculation in only one unit of time i.e. it has applied two instructions to the data at once.

The majority of CPUs at the time of writing do not operate in a strictly MISD fashion although it is sometimes argued that pipelining (which is an optimisation that is found in most CPUs) may technically be a form of MISD.