Was ist eine Gleitkommaspekulation und wie unterscheidet sie sich vom Fließkommamodell des Compilers?

8

Der Intel C ++ - Compiler bietet zwei Optionen zur Steuerung von Gleitkommazahlen:

-fp-spekulation (schnell / sicher / streng / aus) -fp-Modell (präzise / schnell / streng und Quelle / doppelt / erweitert)

Ich denke ich verstehe, was das fp-Modell macht. Aber was ist Fp-Spekulation und wie verhält es sich zu Fp-Modell? Ich habe noch keine Information gefunden, die das erklärt!

    
Sideshow Bob 14.09.2011, 15:40
quelle

3 Antworten

13

-fp-model beeinflusst wie Gleitkommaberechnungen ausgeführt werden, und kann das numerische Ergebnis ändern (durch Lizenzierung unsicherer Optimierungen oder durch Änderung der Genauigkeit, mit der Zwischenergebnisse ausgewertet werden).

>

-fp-speculation ändert die numerischen Ergebnisse nicht, kann aber bewirken, welche Gleitkommaflags durch eine Operation ausgelöst werden (oder welche Traps ausgeführt werden, wenn Gleitkomma-Traps aktiviert sind). 99,99% der Programmierer brauchen sich nicht um diese Dinge zu kümmern, also können Sie wahrscheinlich mit dem Standard laufen und sich nicht darum kümmern.

Hier ist ein konkretes Beispiel; Angenommen, Sie haben die folgende Funktion:

%Vor%

sqrt ist relativ langsam. Es wäre schön, die Berechnung von sqrt(x) wie folgt zu hissen:

%Vor%

Dadurch können wir die Berechnung von sqrt gleichzeitig mit anderen Berechnungen durchführen und so die Latenz unserer Funktion reduzieren. Es gibt jedoch ein Problem. Wenn x negativ ist, löst sqrt(x) das ungültige Flag aus. Im ursprünglichen Programm konnte dies nie passieren, weil sqrt(x) nur berechnet wurde, wenn x nicht negativ war. Im geänderten Programm wird sqrt(x) bedingungslos berechnet. Wenn also x negativ ist, löst das modifizierte Programm das ungültige Flag aus, während das ursprüngliche Programm dies nicht tat.

Mit dem -fp-speculation -Flag können Sie dem Compiler mitteilen, ob Ihnen diese Fälle wichtig sind oder nicht, damit er weiß, ob er für solche Umwandlungen lizenziert ist.

    
Stephen Canon 14.09.2011, 15:46
quelle
1

Out-of-Order-Ausführung und spekulative Ausführung können zu unpassenden Ausnahmen führen oder Ausnahmen zur falschen Zeit auslösen.

Wenn das für Sie wichtig ist, können Sie die Option fp-speculation verwenden, um Spekulationen über Fließkommaanweisungen zu steuern.

Für (ein bisschen) mehr Informationen: Ссылка

    
Ben Voigt 14.09.2011 15:44
quelle
-1

Unter Windows Betriebssystem: 1. Intel Compiler Floating Berechnung 32-Bit-Anwendung vs 64-Bit-Anwendung, gleichen Code Kann Ihnen ein anderes Ergebnis geben !!!! Egal welche Flagge du wählst:) !!!!

2.Visual Studio Compiler Floating-Berechnung 32-Bit-vs 64-Bit-Anwendung, gleichen Code-Ausgang das gleiche Ergebnis.

    
user3004288 13.10.2014 13:57
quelle

Tags und Links