| 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 | |||||