SIMD

Single Instruction Multiple Data (auch SIMDFP) deutsch: Datenverarbeitung mit singulärem Befehls- und parallelem Datenstrang. SIMD ist eine Strategie von Parallelrechnern: Befehle werden von einem Befehlsprozessor  gelesen und an weitere Prozessoren zur Abarbeitung weitergeleitet. Diese Architektur stammt von Grossrechnern und Supercomputern. SIMD-Rechner, auch Array-Prozessoren oder Vektorrechner genannt,  werden vor allem in der digitalen Bildverarbeitung eingesetzt. Auch heutige Mikroprozessoren wie der Pentium 3 und Pentium 4 sowie der PowerPC Prozessor verfügen durch SSE und SSE2 über SIMD-Techniken bzw. den  entsprechenden Befehlssatz, der in der Lage ist, mit einem Befehlsaufruf gleichzeitig mehrere gleichartige Datensätze zu verarbeiten. SIMDFP bedeutet SIMD Floating Point  bzw. SIMD Single Precision Floating Point. Innerhalb der SSE Erweiterung (hier: Pentium III) gibt es acht weitere 128-Bit Datenregister (XMM-Register: XMM0 bis XMM7) sowie einen weiteren gepackten Datentyp (zu 128-Bit):  es handelt sich um 4 gepackte Gleitkommazahlen (je 32-Bit gross): SIMDFP (SIMD Single Precision Floating Point). Der SIMD Befehlssatz arbeitet mit 32-Bit Gleitkommazahlen (Floating-Point Number) in den XMM Registern.  Durch den SSE2 Befehlssatz können in den XMM-Registern auch SIMD-Operationen mit Double-Precision (64-Bit Gleitkommazahlen) durchgeführt werden (oder 16 BYTE Integers, 8 WORD Integers, 4 DWORD Integers oder 2 QWORD Integers).                                             
Siehe auch:    Single-Instruction-Single-Data   SSE   SSE2   Parallele-Datenverarbeitung   Pentium-4   Intel-Core   Intel   Supercomputer   Grossrechner   PowerPC

  SSE

Streaming SIMD Extensions (SIMD: Single Instruction Multiple Data). SSE ist eine Befehlssatzerweiterung der x86-Architektur von Intel, die die Ausführung von Tasks auf einem Prozessor durch Parallelisierung beschleunigen soll.  SSE zielt vor allem auf die Gleitkommaoperationen ab. Mit der Entwicklung des Pentium 3 Prozessors wurden gleichzeitig 128-Bit-Register eingeführt. Damit können mit SSE mehr Daten auf einmal parallel verarbeitet werden. SSE arbeitet beispielsweise  beim Pentium 3 auch mit SIMDFP (SIMD Floating Point bzw. SIMD Single Precision Floating Point).

Datenregister
Innerhalb der SSE-Erweiterung gibt es 8 weitere 128-Bit Datenregister (XMM-Register: XMM0 bis XMM7),  sowie einen weiteren gepackten Datentyp (zu 128-Bit): es handelt sich um 4 gepackte Gleitkommazahlen (je 32-Bit gross): SIMDFP (SIMD Single Precision Floating Point).  Der SIMD Befehlssatz arbeitet mit 32-Bit Gleitkommazahlen (Floating-Point Number) in den XMM Registern. Durch den SSE2  Befehlssatz können in den XMM-Registern auch SIMD-Operationen mit Double-Precision (64-Bit Gleitkommazahlen) durchgeführt werden (oder 16 BYTE Integers (Quad-Precision) oder 8 WORD Integers oder 4 DWORD Integers oder 2 QWORD Integers). 

WORD, DWORD, QWORD
Ein WORD ist in der EDV die kleinste adressierbare Einheit. Der doppelte Wert eines WORD ist ein DWORD (Double-WORD), der vierfache Wert eines WORD ist ein QWORD (Quadruple-WORD).  Bei der Intel i386 Prozessorfamilie (IA-32 x86-Architektur) ist ein WORD = 16-Bit oder 2 Byte (z. B. AX Register), ein DWORD 32-Bit oder 4 Byte und ein Quadruple WORD (QWORD) 64-Bit oder 8 Byte, z. B. das Register MM0. 

Transportbefehl für Daten: MOVAPS
Der SSE Befehlssatz bei Intel enthält auch zusätzliche Befehle zum Transport der Daten zwischen  den XMM Registern oder zwischen einem XMM Register und dem Hauptspeicher: Move Aligned Packed Single-Precision Floating-Point Values (MOVAPS): MOVAPS überträgt einen Double QWORD Operanden mit 4 Gleitkommawerten zu je 32-Bit aus dem  Arbeitsspeicher in ein 128-Bit XMM Register und vice versa. Denselben Vorgang kann MOVAPS auch zwischen 2 XMM Registern durchführen. Die Speicheradresse muss durch 16 teilbar sein (Speicheradresse modulo 16 = 0 bzw. 16 Byte aligned). 

Transportbefehl für Daten: MOVUPS
Move Unaligned Packed Single-Precision Floating-Point Values (MOVUPS): führt dieselben Operationen aus wie MOVAPS, akzeptiert jedoch auch Adressen, die nicht durch 16 teilbar sind (unaligned).   

Weitere Befehle
Weiterhin gibt es noch: MOVLP (Move Low Packed Single-Precision Floating-Point Value) und MOVHPS (Move High Packed Single-Precision Floating-Point Values).  Bei MOVLP werden 2 gepackte Gleitkommazahlen zu je 32-Bit in die zwei unteren Bereiche eines XMM Registers  übertragen, wobei die 2 oberen Bereiche nicht verändert werden. Der MOVHPS Befehl arbeitet ähnlich, nur dass die beiden 32-Bit Floating Point Numbers in die beiden oberen Bereiche des XMM Registers kopiert werden und die beiden unteren Bereiche  des XMM Registers nicht verändert werden. MOVLHPS (Move Packed Single-Precision Floating-Point Values Low to High), MOVHLPS (Move Packed Single-Precision Floating-Point Values High to Low), MOVMSKPS (Move Packed Single-Precision  Floating-Point Sign Mask) und MOVSS (Move Scalar Single-Precision Floating-Point Values) sind weitere SSE Datentransportbefehle. 

Gruppen von Befehlssatzerweiterungen
Weitere Befehlssatzerweiterungen (gepackte und skalare Gleitkommabefehle) von SSE sind folgende Gruppen:  Logische Befehle, Vergleichsbefehle, Arithmetische Befehle, Konvertierungsbefehle und Tauschbefehle. Ein Beispiel für einen arithmetischen SSE Befehl ist Add Scalar Single-Precision Floating-Point Value bzw. Substract Scalar Single-Precision  Floating-Point Value (ADDSS bzw. SUBSS): Subtraktion bzw. Addition der beiden untersten Gleitkommazahlen des Operanden und Abspeichern des Ergebniswertes im entsprechenden Zielregister. Die oberen 3 Bereiche des Zielregisters werden nicht verändert.                 
Siehe auch:    SSE2   SSE3   EM64T   Gleitkommazahl   SIMD   Single-Instruction-Single-Data   Task   Thread   Core-2-Duo   Register