SSE2

SSE2, SIMD Erweiterungen 2 Verströmend, ist einer von Intel SIMD (Einzelne Instruktion, Vielfache Daten) Verarbeiter ergänzende Befehlssätze, die zuerst von Intel mit der anfänglichen Version des Pentiums 4 2001 eingeführt sind. Es streckt sich früher SSE Befehlssatz aus und ist beabsichtigt, um MMX völlig zu verdrängen. Intel hat SSE2 erweitert, um SSE3 2004 zu schaffen. SSE2 hat 144 neue Instruktionen zu SSE hinzugefügt, der 70 Instruktionen hat. Konkurrierender Span-Schöpfer AMD hat Unterstützung für SSE2 mit der Einführung ihres Opteron und Athlon 64 Reihen von AMD64 64-Bit-Zentraleinheiten 2003 hinzugefügt.

Änderungen

SSE2 erweitert MMX Instruktionen, auf XMM-Registern zu funktionieren, dem Programmierer erlaubend, völlig zu vermeiden, dass die acht 64-Bit-MMX "aliased" auf dem ursprünglichen IA-32 einschreiben, der Punkt-Register-Stapel schwimmen lässt. Das erlaubt, ganze Zahl SIMD und Skalar zu mischen, der Punkt-Operationen ohne die Weise-Schaltung schwimmen lässt, die zwischen MMX und x87 erforderlich ist, der Punkt-Operationen schwimmen lässt. Jedoch wird das durch den Wert des im Stande Seins überschattet, MMX Operationen auf den breiteren SSE-Registern durchzuführen.

Andere SSE2 Erweiterungen schließen eine Reihe von Steueranweisungen des geheimen Lagers beabsichtigt in erster Linie ein, um Verschmutzung des geheimen Lagers zu minimieren, wenn sie unbestimmte Ströme der Information und eine hoch entwickelte Ergänzung von numerischen Format-Umwandlungsinstruktionen bearbeiten.

Die Durchführung von AMD von SSE2 auf dem AMD64 (x86-64) Plattform schließt zusätzliche acht Register ein, die Gesamtzahl zu 16 (XMM0 durch XMM15) verdoppelnd. Diese zusätzlichen Register sind nur sichtbar, wenn sie in 64-Bit-Weise laufen. Intel hat diese zusätzlichen Register als ein Teil ihrer Unterstützung für die x86-64 Architektur (oder im Sprachgebrauch von Intel, "Intel 64") 2004 angenommen.

Unterschiede zwischen x87 FPU und SSE2

FPU (x87) Instruktionen stellen höhere Präzision durch das Rechnen von Zwischenergebnissen mit 80 Bit der Präzision zur Verfügung, um standardmäßig roundoff Fehler in numerisch nicht stabilen Algorithmen zu minimieren (sieh IEEE 754 Designgrundprinzip und Verweisungen darin). Jedoch ist der x87 FPU eine Skalareinheit nur, wohingegen SSE2, der einen kleinen Vektoren von operands in der Parallele bearbeiten kann.

Wenn für x87 entworfene Codes zur niedrigeren Präzision doppelte Präzision SSE2 Schwimmen-Punkt, bestimmte Kombinationen von Matheoperationen getragen oder eingegeben werden, kann datasets auf messbare numerische Abweichung hinauslaufen, die ein Problem in der reproduzierbaren wissenschaftlichen Berechnung z.B sein kann, wenn die Berechnungsergebnisse gegen von einer verschiedenen Maschinenarchitektur erzeugte Ergebnisse verglichen werden müssen. Ein zusammenhängendes Problem ist, dass, historisch, Sprachstandards und Bearbeiter in ihrem Berühren der x87 80-Bit-Register inkonsequent gewesen waren, die doppelte verlängerte Präzisionsvariablen, im Vergleich zu den doppelten Formaten und in SSE2 durchgeführten Formaten der einfachen Präzision durchführen: Das Runden von verlängerten Präzisionszwischenwerten, um Präzisionsvariablen zu verdoppeln, wurde nicht völlig definiert und war von Durchführungsdetails solcher als abhängig, als Register zum Gedächtnis verschüttet wurden. Jedoch, moderne Sprachstandards wie C99 und Fortran 2003 hat IEEE 754 Schwimmpunkt-Unterstützung vereinigt und gibt jetzt genau die Semantik von doppelten erweitert ("lange doppelt") Präzisionsausdrücke an, um solche Reproduzierbarkeitsprobleme zu vermeiden.

Unterschiede zwischen MMX und SSE2

SSE2 erweitert MMX Instruktionen, auf XMM-Registern zu funktionieren. Deshalb ist es möglich, den ganzen vorhandenen MMX-Code zu einer SSE2 Entsprechung umzuwandeln. Da ein XMM-Register zweimal so lang ist wie ein MMX-Register, müssen Schleife-Schalter und Speicherzugang eventuell geändert werden, um das anzupassen. Jedoch sind 8-Byte-Lasten und Läden zu XMM verfügbar, so ist das nicht ausschließlich erforderlich.

Obwohl eine SSE2 Instruktion auf doppelt so viel Daten als eine MMX Instruktion funktionieren kann, könnte Leistung nicht bedeutsam zunehmen. Zwei Hauptgründe sind: Das Zugreifen SSE2 Daten im zu einer 16-Byte-Grenze nicht ausgerichteten Gedächtnis können bedeutende Strafe und den Durchfluss von SSE2 Instruktionen in älteren x86 Durchführungen übernehmen, war Hälfte davon für MMX Instruktionen. Intel hat das erste Problem durch das Hinzufügen einer Instruktion in SSE3 gerichtet, um die Gemeinkosten zu reduzieren, auf unausgerichtete Daten zuzugreifen und die gesamte Leistung von falsch ausgerichteten Lasten und das letzte Problem durch das Verbreitern des Ausführungsmotors in ihrer Kernmikroarchitektur im 2 Kernduett und den späteren Produkten zu verbessern.

Da MMX und X87-Register-Dateideckname einander, mit MMX x87 Instruktionen hindern werden, wie gewünscht, zu arbeiten. Sobald MMX verwendet worden ist, muss der Programmierer die emms Instruktion verwenden (C: _mm_empty ), um Operation zum x87 wieder herzustellen, schreiben Datei ein. Auf einigen Betriebssystemen wird x87 sehr viel nicht verwendet, aber kann noch in einigen kritischen Gebieten wie pow verwendet werden , wo die Extrapräzision erforderlich ist. In solchen Fällen kann der korrupte durch den Misserfolg verursachte Schwimmpunkt-Staat, emms auszustrahlen, unentdeckt für Millionen von Instruktionen vor dem äußersten Veranlassen die Schwimmpunkt-Routine gehen, zu scheitern, NaN zurückgebend. Da das Problem im MMX-Code nicht lokal offenbar ist, kann der Programmfehler sehr zeitaufwendig sein, um zu finden und zu korrigieren. Da SSE2 dieses Problem nicht hat, gewöhnlich viel besseren Durchfluss zur Verfügung stellt und mehr Register in 64-Bit-Code zur Verfügung stellt, sollte es für fast die ganze Vectorization-Arbeit bevorzugt werden.

Bearbeiter-Gebrauch

Als zuerst eingeführt 2000 SSE2 durch Softwareentwicklungswerkzeuge nicht unterstützt wurde. Zum Beispiel, um SSE2 in einem Projekt von Microsoft Developer Studio zu verwenden, musste der Programmierer entweder Reihenzusammenbau oder Importgegenstand-Code von einer Außenquelle manuell schreiben. Später hat der Visuelle C ++ Verarbeiter-Satz SSE2-Unterstützung zu Visuellem C ++ und MASM hinzugefügt.

Intel C ++ Bearbeiter kann SSE4/SSSE3/SSE3/SSE2 und/oder SSE-Code ohne den Gebrauch des handcodierten Zusammenbaues automatisch erzeugen.

Seit GCC 3 kann GCC SSE/SSE2 Skalarcode automatisch erzeugen, wenn das Ziel jene Instruktionen unterstützt. Automatischer vectorization für SSE/SSE2 ist seit GCC 4 hinzugefügt worden.

Das Sonne-Studio-Bearbeiter-Gefolge kann auch SSE2 Instruktionen erzeugen, wenn die Bearbeiter-Fahne-xvector=simd verwendet wird.

Zentraleinheiten, die SSE2 unterstützen

Bemerkenswerte IA-32 Zentraleinheiten, die nicht SSE2 unterstützen

SSE2 ist eine Erweiterung der IA-32 Architektur. Deshalb unterstützt jede Architektur, die IA-32 nicht unterstützt, SSE2 nicht. X86-64-Zentraleinheiten das ganze Werkzeug IA-32. Alle bekannte x86-64 Zentraleinheiten führen auch SSE2 durch. Da IA-32 SSE2 zurückdatiert, haben frühe IA-32 Zentraleinheiten es nicht durchgeführt. SSE2 und die anderen SIMD Befehlssätze waren in erster Linie beabsichtigt, um Zentraleinheitsunterstützung für die Echtzeitgrafik zu verbessern, namentlich spielend. Eine Zentraleinheit, die für diesen Zweck nicht auf den Markt gebracht wird oder hat das einen SIMD alternativen Befehlssatz hat kein Bedürfnis nach SSE2.

Die folgenden Zentraleinheiten haben IA-32 durchgeführt, nachdem SSE2 entwickelt wurde, aber SSE2 nicht durchgeführt hat:

Siehe auch

  • SSE2 Instruktionen

Jerry Bruckheimer / Mai 1968 in Frankreich
Impressum & Datenschutz