Template:MIMD In computing, SIMD (Single Instruction, Multiple Data) is a set of operations for efficiently handling large quantities of data in parallel, as in a vector processor or array processor. First popularized in large-scale supercomputers (as opposed to MIMD parallelization), smaller-scale SIMD operations have now become widespread in personal computer hardware. Today the term is associated almost entirely with these smaller units.

In the past there were a number of dedicated processors for this sort of task, commonly referred to as Digital Signal Processors, or DSPs. The main difference between SIMD and DSP is that DSPs were complete processors with their own (often difficult to use) instruction set, whereas SIMD designs rely on the general-purpose portions of the CPU to handle the program details, and the SIMD instructions handle the data manipulation only. DSP's also tend to include instructions to handle specific types of data, sound or video for instance, whereas SIMD systems are considerably more general purpose.



An example of an application that can take advantage of SIMD is one where the same value is being added to a large number of data points, a common operation in many multimedia applications. One example would be changing the brightness of an image. Each pixel of an image consists of three values for the brightness of the red, green and blue portions of the color. To change the brightness, the R G and B values are read from memory, a value is added (or subtracted) from it, and the resulting value is written back out to memory.

With a SIMD processor there are two improvements to this process. For one the data is understood to be in blocks, and a number of values can be loaded all at once. Instead of a series of instructions saying "get this pixel, now get this pixel", a SIMD processor will have a single instruction that effectively says "get all of these pixels" ("all" is a number that varies from design to design). For a variety of reasons, this can take much less time than it would to load each one by one as in a traditional CPU design.

Another advantage is that SIMD systems typically include only those instructions that can be applied to all of the data in one operation. In other words, if the SIMD system works by loading up eight data points at once, the add operation being applied to the data will happen to all eight values at the same time. Although the same is true for any superscalar processor design, the level of parallelism in a SIMD system is typically much higher.


Many SIMD designers are hampered by design considerations outside their control. One of these considerations is the cost of adding registers for holding the data to be processed. Ideally one would want the SIMD units of a CPU to have their own registers, but many are forced for practical reasons to re-use existing CPU registers - typically the floating point registers. These tend to be 64-bits in size, smaller than optimal for SIMD use, as well as leading to problems if the code attempts to use both SIMD and normal floating point instructions at the same time - at which point the units fight over the registers. Such a system was used in Intel's first attempt at SIMD, MMX, and the performance problems were such that the system saw very little use.


The first use of SIMD instructions was in vector supercomputers and was especially popularized by Cray in the 1970s.

Later machines used a much larger number of relatively simple processors. Some examples of this type of machine included:

There were many others from this era as well.

Recent SIMD computers

More recently, small-scale (64 or 128 bits) SIMD has become popular on general-purpose CPUs, starting in 1994 with PA-RISC's MAX instruction set. Today SIMD instructions can be found to one degree or another on most CPUs, including the PowerPC's AltiVec, Intel's MMX, SSE, SSE2 and SSE3, AMD's 3DNow!, SPARCs VIS, PA-RISCs MAX and the MIPS MDMX and MIPS-3D.

The instruction sets generally include a full set of vector instructions, including multiply, invert and trace. These are particularily useful for processing 3D graphics, although modern graphics cards with embedded SIMD have largely taken over this task from the CPU. Some systems also include permute functions that re-pack elements inside vectors, making them particularly useful for data processing and compression.


Adoption of SIMD systems in personal computer software has been slow, due to a number of problems. One was that many of the early SIMD instruction sets tended to slow overall performance of the system due to the re-use of existing floating point registers. Other systems, such as MMX and 3DNow!, offered support for data types that were not interesting to a wide audience. Compilers also often lacked support requiring programmers to resort to assembly language coding.

SIMD on X86 have had a slow start. The introduction of the various versions of SSE confused matters somewhat, but today the system seems to have settled down and newer compilers should result in more SIMD-enabled software.

Apple Computer has had somewhat more success, even though they entered the SIMD market later than the rest. AltiVec offers a rich system and can be programmed using increasingly sophisticated compilers from Motorola, IBM and GNU, therefore assembly is rarely needed. Additionally, many of the systems that would benefit from SIMD are supplied by Apple itself, for example iTunes and QuickTime.

Commercial applications

Though it has generally proven difficult to find sustainable commercial applications for SIMD processors, one that has had some measure of success is the GAPP, which was developed by Lockheed Martin and taken to the commercial sector by their spin-off Teranex. The GAPP's recent incarnations have become a powerful tool in real-time video processing applications such as conversion between various video standards and frame rates (NTSC to/from PAL, NTSC to/from HDTV formats, etc.), deinterlacing, noise reduction, adaptive video compression, and image enhancement.

A more ubiquitous application for SIMD is found in video games; nearly every modern video game console since the Sony PlayStation 2 has incorporated a SIMD processor somewhere in its architecture. 3D graphics applications tend to lend themselves well to SIMD processing as they rely heavily on operations with 4-dimensional vectors.

One of the more recent processors to use vector processing is the Cell Processor developed by IBM in cooperation with Toshiba and Sony. It uses a number of SIMD processors (each with independent RAM and controlled by a general purpose CPU) and is geared towards the huge datasets required by 3D and video processing applications.

External links

fr:Single Instruction Multiple Data ja:SIMD nl:SIMD pl:SIMD zh:单指令流多数据流


  • Art and Cultures
    • Art (
    • Architecture (
    • Cultures (
    • Music (
    • Musical Instruments (
  • Biographies (
  • Clipart (
  • Geography (
    • Countries of the World (
    • Maps (
    • Flags (
    • Continents (
  • History (
    • Ancient Civilizations (
    • Industrial Revolution (
    • Middle Ages (
    • Prehistory (
    • Renaissance (
    • Timelines (
    • United States (
    • Wars (
    • World History (
  • Human Body (
  • Mathematics (
  • Reference (
  • Science (
    • Animals (
    • Aviation (
    • Dinosaurs (
    • Earth (
    • Inventions (
    • Physical Science (
    • Plants (
    • Scientists (
  • Social Studies (
    • Anthropology (
    • Economics (
    • Government (
    • Religion (
    • Holidays (
  • Space and Astronomy
    • Solar System (
    • Planets (
  • Sports (
  • Timelines (
  • Weather (
  • US States (


  • Home Page (
  • Contact Us (

  • Clip Art (
Personal tools