Frage

Ich bin ein wenig vertraut mit dem x87 Anweisungen für in x86 Gleitkommazahlen Manipulieren Montag . Allerdings habe ich irgendwo gelesen, dass diese nur noch selten verwendet. (Und wurden in 64-Bit-Windows-Treiber nicht erlaubt) [ 1 ]

Wenn das der Fall ist, welche Anweisungen sollte ich verwenden? Ich sah etwas über SSE, aber wenn ich nicht irre, diese Anweisungen wurden viel mehr vor kurzem hinzugefügt und wird nicht auf älteren Chips zur Verfügung stehen. (Wie der Pentium II, etc.)

Welche Anweisungen sollte ich verwenden?

War es hilfreich?

Lösung

Wenn Sie bereit sind, über die Abwärtskompatibilität zu vergessen, ist SSE der Weg zu gehen. Es hat einen reichen Befehlssatz und Vektor-Unterstützung. Wenn Sie zu optimieren wollen, was auch immer Prozessor ausgeführt wird, sollten Sie versuchen, in einer Hochsprache zu schreiben und mit ICC-Kompilierung, die überprüft der Prozessor gerade ausgeführt wird, und führt Code, der für das optimiert ist.

Am Ende des Tages ist es zu den erwarteten Benutzern Ihrer Software abhängig ist.

Andere Tipps

Wenn Sie rückwärts kompatibel sein müssen, werden Sie x87 Anweisungen verwenden. Ansonsten, wie Nathan Fellman sagt, SSE # Anweisungen der richtige Weg sein kann zu gehen, auch, weil Code für sie etwas leichter zu schreiben ist (sie verwenden ein normales Registermodell, während x87 einen Stapel verwendet).

Having said that, es gibt mehrere Gründe, warum Sie verwenden x87-Code wollen könnte (oder Misch x87 / SSE-Code):

(1) x87 bietet eine höhere Genauigkeit, d.h. 80-Bit-Floating-Point-Berechnung. (Beide, x87 / SSE Angebot 32-Bit- und 64-Bit-schwimmt.) Dies ist möglicherweise ein Problem mit z.B. einige wissenschaftliche Code, der die zusätzliche Präzision benötigen.

(2) x87 bietet einige Operationen, die von den # Befehlssätze SSE nicht abgedeckt sind, nämlich Anweisungen für triogonometric Operationen (sin, cos, ...) und Logarithmen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top