SIMD (Single Instruction, Multiple Data) ist ein Ausführungsmodell der CPU, bei dem ein einziger Maschinenbefehl dieselbe Operation auf mehreren Datenwerten gleichzeitig ausführt. Während eine normale Rechenoperation zwei Werte verarbeitet, bearbeitet ein SIMD-Befehl etwa vier, acht oder sechzehn Werte in einem Takt — das nennt man Datenparallelität.

Flynn-Taxonomie

Die Flynn-Taxonomie ordnet Rechnerarchitekturen nach dem Verhältnis von Befehlen und Datenstrom:

  • SISD – ein Befehl, ein Datenwert: klassische Einzelkern-Verarbeitung.
  • SIMD – ein Befehl, mehrere Datenwerte: Vektor-Verarbeitung.
  • MISD – mehrere Befehle, ein Datenwert: praktisch kaum verbreitet.
  • MIMD – mehrere Befehle, mehrere Datenwerte: Mehrkernprozessoren und Multiprozessor-Systeme.

SIMD ist damit die datenparallele Ergänzung zur befehls-parallelen Ausführung eines superskalaren Prozessors: Superskalarität startet mehrere Befehle pro Takt, SIMD verarbeitet mit einem Befehl mehrere Daten. Moderne CPUs kombinieren beides.

SIMD-Register und Befehlssätze

SIMD braucht breite Register, in denen mehrere Werte nebeneinander liegen. Auf x86-Prozessoren sind das die XMM-Register (128 Bit, z. B. vier 32-Bit-Gleitkommazahlen), die YMM-Register (256 Bit, AVX) und die ZMM-Register (512 Bit, AVX-512). ARM-Prozessoren bieten NEON (128 Bit) und SVE (skalierbar), PowerPC nutzt Altivec. Jeder Befehl operiert auf dem ganzen Register als Vektor, etwa: „addiere alle vier Gleitkommawerte von XMM0 und XMM1 in einem Schritt".

Vektorisierung durch den Compiler

Moderne Compiler erkennen Schleifen, deren Durchläufe unabhängig voneinander sind, und erzeugen daraus automatisch SIMD-Befehle (Auto-Vektorisierung). Für die manuelle Kontrolle stehen sogenannte Intrinsics bereit – Funktionsabbilder einzelner SIMD-Befehle im Quellcode. Der eigentliche SIMD-Befehl ist wie jeder andere ein Opcode in Maschinensprache, keine eigene Programmiersprache.

Typische Anwendungen

  • Multimedia: Bild- und Audioverarbeitung, Encoding, Filter (z. B. je vier Pixel pro Befehl).
  • Grafik und GPUs: Eine GPU führt tausende Threads gleichzeitig aus – ein Modell, das als SIMT (Single Instruction, Multiple Threads) SIMD-artig arbeitet.
  • Kryptografie: Spezielle SIMD-Befehle wie AES-NI beschleunigen Verschlüsselung.
  • Maschinelles Lernen: Matrix- und Vektoroperationen (z. B. AVX-512 mit 512-Bit-FMA-Einheiten).

Die SIMD-Einheiten gehören zur Mikroarchitektur; die breiten Registerbänke sind Teil des Prozessorzustands. Weil ein SIMD-Register bis zu 64 Byte umfasst, kostet das Sichern beim Interrupt oder Thread-Wechsel entsprechend Zeit – die Hardware muss den kompletten Vektorzustand retten, bevor der Handler laufen darf.

Verwandt: Pipelining beschleunigt Befehle im Fließband, während SIMD die Menge der verarbeiteten Daten pro Befehl erhöht.