2009-12-04 16 views
20

Ich weiß, dass x87 höhere interne Präzision hat, was wahrscheinlich der größte Unterschied ist, den Leute zwischen ihm und SSE-Operationen sehen. Aber ich frage mich, gibt es einen anderen Vorteil für die Verwendung von x87? Ich habe die Angewohnheit, in jedem Projekt automatisch -mfpmath=sse einzugeben, und ich frage mich, ob mir etwas fehlt, das die x87 FPU bietet.Vorteile von x87 über SSE

Antwort

14

x87 hat einige Anweisungen, die nicht im SSE-Befehlssatz vorhanden sind.

Aus dem Kopf ist alles trigonometrische Sachen wie fsin, fcos, fatan, fatan2 und einige der exponentiellen/logarithmischen Zeug.

Wenn Ihr Code die meiste Zeit damit verbringt, Trigonometrie zu verwenden, sehen Sie möglicherweise eine leichte Leistungssteigerung, wenn Sie x87 verwenden. Einige DSP-Algorithmen würden in diese Kategorie fallen.

Allerdings für Code Math-Code, wo Sie die meiste Zeit damit verbringen, Ergänzungen, Multiplikationen ect. SSE ist normalerweise schneller.

+0

@LiraNuna wirklich? Mir ist kein Opcode bekannt, der sin oder cos direkt aus dem SSE-Befehlssatz berechnet. –

+5

Bitte geben Sie eine Quelle, Quonux. – asdf

+0

http://gruntthepeon.free.fr/ssemath/ – MickLH

16
  1. Es ist auf wirklich alten Maschinen vorhanden.

EOF

4
  • Es besteht eine beträchtliches Erbe und kleine Systemkompatibilität mit dem x87: SSE ist eine relativ neue Prozessor-Funktion. Wenn Ihr Code auf einem eingebetteten Mikrocontroller ausgeführt werden soll, besteht eine gute Chance, dass er SSE-Anweisungen nicht unterstützt.

  • Sogar Systeme, auf denen keine FPU installiert ist, bieten oft 80x87 Emulatoren, die den Code transparent (mehr oder weniger) laufen lassen. Ich kenne keine SSE-Emulatoren - sicherlich hat eines meiner Systeme keine, daher lehnen die neuesten Adobe Photoshop-Elemente die Ausführung ab.

  • Die 80x87-Befehle haben gute Parallelbetriebseigenschaften, die seit ihrer Einführung im Jahr 1982 gründlich untersucht und analysiert wurden. Verschiedene Klone des x86 könnten auf SSE-Anweisungen stecken bleiben.

+2

Also Ihr Endergebnis ist: (a) x87 hat gute Legacy-Unterstützung (b) x87 wurde gut untersucht. –

+0

Und (c) x87 ist etabliert. – asdf

+0

Ich bin nicht 100% positiv, aber ich glaube, dass Gleitkommaberechnungen bei vielen 32-Bit-Prozessoren ohne FPU schneller bei 80-Bit-Werten als 64-Bit-Werten durchgeführt werden können [eine 53-Bit-Mantisse und 12 -bit-Exponent ist nicht schneller zu bearbeiten als eine 64-Bit-Mantisse und ein 16-Bit-Exponent, erfordern jedoch zusätzliche Zeit zum Packen und Entpacken].Ich wundere mich wirklich, warum das 80-Bit-Format in den letzten paar Jahrzehnten schmachtet, denn als * computation * -Format würde es in jeder Hinsicht einem 64-Bit-Double überlegen sein. – supercat

7

FPU Anweisungen sind kleiner als SSE-Befehle, so dass sie ideal für Demoszene Sachen

+0

Ich kaufe das nicht; sicherlich komprimieren ernsthafte Demoszenen-Programmierer ihre Befehlsströme; domänenspezifische Komprimierungstools sollten in der Lage sein, SSE-Anweisungen genauso gut zu komprimieren wie x87-Anweisungen. –

+0

@StephenCanon (unkomprimiert), aber Ihr Punkt ist richtig, wenn Sie irgendeine Art von Komprimierung verwenden – Quonux

0

Konvertierung zwischen float und double ist schneller mit x87 (in der Regel kostenlos) als mit SSE. Mit x87 können Sie float, double oder long double in den oder aus dem Registerstapel laden und speichern und ohne zusätzliche Kosten in oder aus der erweiterten Genauigkeit konvertieren. Mit SSE sind zusätzliche Anweisungen erforderlich, um die Typumwandlung durchzuführen, wenn Typen gemischt sind, da die Register float oder double Werte enthalten. Diese Umwandlungsanweisungen sind ziemlich schnell, nehmen aber zusätzliche Zeit in Anspruch.

Die eigentliche Lösung ist es, float und double übermäßig zu mischen, nicht um x87, natürlich zu verwenden.