Frage

Was sollten wir von der Floating-Point-Unterstützung in 64-Bit-Delphi-Compiler erwarten?

  • Will 64-Bit-Compiler Verwendung SSE implementieren Gleitkomma-Arithmetik?

  • Will 64-Bit-Compiler unterstützt die Strom 80-Bit-Floating-Typ (Extended)?

Diese Fragen eng miteinander verbunden, so dass ich sie als eine einzige Frage stellen.

War es hilfreich?

Lösung

Für das Doppel = extended Bit:

Read Allens Bauer Twitter-Account Kylix_rd:

http://twitter.com/kylix_rd

Im Nachhinein logisch, denn während SSE2 regs 128 Bit sind, werden sie als zwei 64-Bit-Doppelzimmer verwendet werden.

Andere Tipps

machte ich zwei Beiträge zu diesem Thema ( hier und dort ), zusammenfassen, ja, die 64-Bit-Compiler verwendet SSE2 (double precision), aber es SSE nicht (einfache Genauigkeit) verwenden. Alles ist auf doppelte Genauigkeit Schwimmer umgewandelt und berechnet SSE2 mit ( Bearbeiten jedoch gibt es eine Option zur Steuerung des)

Dieses Mittel F. I. dass, wenn Mathematik auf doppelter Genauigkeit floats schnell ist, Mathematik auf einfache Genauigkeit ist langsam (viele redundanten Konvertierungen zwischen Einzel- und Doppel Genauigkeiten in geworfen werden), „Extended“ wird aliased auf „Double“ und Zwischenberechnungen Präzision wird auf doppelte Genauigkeit begrenzt .

Edit: Es war eine nicht dokumentiert (zu der Zeit) Richtlinie, dass die Kontrollen SSE Code-Generierung, {$ EXCESSPRECISION OFF} aktiviert SSE Code-Generierung, die im Rahmen der Erwartungen zurück Leistung bringt.

Nach Marco van de Voort in seiner Antwort an: Wie soll ich meine 32-Bit-Delphi-Programme für einen eventuellen 64-Bit-Compiler vorbereiten:

  

x87 FPU auf x64 veraltet und im allgemeinen SSE2 für florating Punkt verwendet werden. so Gleitkomma- und seine Ausnahmebehandlung könnte etwas anders arbeiten und verlängern möglicherweise nicht 80-Bit (aber 64-Bit- oder, weniger wahrscheinlich, dass die 128-Bit). Dies bezieht sich auch auf die übliche Rundung (copro controlwork) ändert sich, wenn wiht C-Code eine Schnittstelle, die eine andere FPU Wort erwartet.

PHIS auf dieser Antwort kommentiert mit:

  

ich würde nicht sagen, dass der x87-FPU ist veraltet, aber es ist sicherlich der Fall, dass Microsoft sich entschieden hat, ihr Bestes zu tun, um es auf diese Weise zu machen (und sie scheinen wirklich nicht wie 80-Bit-FP-Werte) , obwohl es eindeutig technisch möglich ist, die FPU / 80-Bit schwimmt auf Win64 zu verwenden.

Ich habe gerade gebucht eine Antwort auf Ihre Frage, aber ich denke, es sollte hier eigentlich gehen:

Offensichtlich niemand außer für Embarcadero kann dies sicher beantworten, bevor das Produkt freigegeben wird.

Es ist sehr wahrscheinlich, dass jeder anständige x64-Compiler die SSE2-Befehlssatz als Grundlage verwenden und versuchen daher, so viel Gleitkomma-Berechnung zu tun SSE mit Funktionen wie möglich, die Verwendung der FPU x87 minimiert wird. Es sollte aber auch gesagt werden, dass es keinen technischen Grund ist, dass die Verwendung der x87-FPU in x64-Anwendungscode (trotz der Gerüchte im Gegenteil verhindern würde, die seit einiger Zeit schon haben, wenn Sie an diesem Punkt weitere Informationen wünschen, wenden Sie sich bitte haben einen Blick auf Agner Fog Aufrufkonvention Handbuch , insbesondere Kapitel 6.1 „Can Gleitkommaregister sein verwendet in 64-Bit-Windows? ").

Bearbeiten 1 : Delphi XE2 Win64 in der Tat nicht mehr als 80-Bit-Floating-Point-Berechnungen aus der Box unterstützt (siehe zB discussuion hier (obwohl es ein / schreiben solche Werte lesen können). man kann solche Fähigkeiten zu Delphi Win64 mit einem Rekord + bringen Klasse Betreiber, als getan in dieser TExtendedX87 Typ (obwohl Einschränkungen gelten).

Wir werden nicht sicher wissen, wie die 64-Bit-Delphi-Compiler-Gleitkomma-Arithmetik, bis Embarcadero tatsächlich Schiffe umsetzen. Alles, was vor das ist nur Spekulation. Aber sobald wir sicher wissen, wird es zu spät sein, etwas dagegen zu tun.

Alle Bauer Tweets scheinen zu zeigen, dass sie SSE2 verwenden werden, und dass der erweiterte Typ anstelle von 80 Bit auf 64 Bit reduziert werden. Ich denke, dass eine schlechte Idee wäre, für eine Vielzahl von Gründen. Ich habe meine Gedanken in einem Quality Bericht geschrieben Erweiterte sollte ein 80-Bit-Typ bleiben auf 64-Bit-Plattformen

Wenn Sie Ihren Code nicht fallen wollen von 80-Bit-Genauigkeit auf 64-Bit-Präzision, wenn Sie auf 64-Bit Delphi zu verschieben, klicken Sie auf den Link und Quality Stimme für meinen Bericht. Je mehr Stimmen, desto wahrscheinlicher Embarcadero wird hören. Wenn sie SSE2 tun verwenden für 64-Bit-Gleitkomma, was Sinn macht, dann 80-Bit-Gleitkomma-Addition der FPU verwenden wird zusätzliche Arbeit für Embarcadero. Ich bezweifle, sie würde diese Arbeit tun, wenn viele Entwickler darum bitten.

Wenn Sie es wirklich brauchen, dann können Sie die TExtendedX87 Einheit von Philipp M. Schlüter ( diesem Embarcadero Forum-Thread .

@PhiS:., Wenn Sie Ihre Antwort mit der Info von der Mine aktualisieren, ich werde meine entfernen

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