SIMD vs. SIMT: Unterschiede im Überblick
SIMD und SIMT führen beide mit einem Befehl dieselbe Operation auf vielen Daten aus, unterscheiden sich aber darin, wie sie sich dem Programm darstellen. SIMD sind die Vektorbefehle der CPU: Programmierer oder Compiler legen Daten in Vektorregister fester Breite und verwenden die Befehle explizit. SIMT ist das Verfahren der GPU: Man schreibt die Verarbeitung eines einzelnen Threads ganz normal, und die Hardware bündelt z. B. 32 Threads zu einem Warp, der mit demselben Befehl ausgeführt wird. Verzweigungen lassen sich pro Thread schreiben, doch wenn sie innerhalb eines Warps auseinanderlaufen, werden beide Pfade nacheinander ausgeführt, was die Effizienz senkt.
| Merkmal | SIMD | SIMT |
|---|---|---|
| Ausführungsmodell | Ein Befehl verarbeitet gleichzeitig mehrere in einem Vektorregister angeordnete Elemente | Ein Befehl wird gleichzeitig von vielen zu einem Warp gebündelten Threads ausgeführt. Jeder Thread hat eigene Register |
| Sicht des Programms | Man schreibt mit Blick auf die Vektorbreite. Intrinsics, Assembler oder automatische Vektorisierung des Compilers | Man schreibt die Verarbeitung eines Threads als skalaren Code. Die Bündelung übernimmt die Hardware |
| Parallelitätsbreite | Durch die Registerbreite bestimmt. Beispiel: Bei 512 Bit sind es 16 Zahlen à 32 Bit | Warp-Breite (z. B. 32). Der ganze Chip hält gleichzeitig einige zehntausend Threads |
| Verzweigungen | Verzweigungen pro Element sind nicht möglich. Beide Seiten werden berechnet und über eine Maske aus dem Vergleichsergebnis ausgewählt | Pro Thread möglich. Laufen sie im Warp auseinander, werden beide Pfade nacheinander ausgeführt und nicht betroffene Threads pausieren (Divergenz) |
| Verwaltung aktiver Elemente | Explizit durch Programmierer oder Compiler mittels maskierter Befehle oder Blend-Befehle | Die Hardware verwaltet die aktiven Threads automatisch |
| Speicherzugriff | Stark beim gebündelten Lesen zusammenhängender Adressen. Verstreute Adressen werden mit Gather/Scatter-Befehlen behandelt, was langsam ist | Jeder Thread kann Adressen frei angeben. Lesen benachbarte Threads benachbarte Adressen, werden die Zugriffe zusammengefasst (Coalescing) |
| Verbergen der Speicherlatenz | Große Caches, Out-of-Order-Ausführung, Prefetching | Wechsel zwischen vielen Warps: Während ein Warp wartet, läuft ein anderer |
| Einordnung in Flynns Klassifikation | SIMD selbst | Eine Form von SIMD, die in Gestalt von Threads dargestellt wird |
| Typischer Einsatz | CPU-Vektorbefehle. Schleifen in Bild- und Audioverarbeitung, Kryptografie, Matrixoperationen usw. | GPU-Warps. Massiv parallele Berechnungen wie Grafik, KI-Training und -Inferenz sowie wissenschaftlich-technisches Rechnen |
Die Zahlenwerte sind typische Größenordnungen und variieren je nach Prozessgeneration und Produkt.