PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Performanceverlust bei Umschaltung des Rundungsmodus (C++)


WarSlash
2015-06-11, 00:57:06
Ich suche konkret eine Quelle bzw. eine Begründung dafür, wieso die Performance bei Veränderung des Rundungsmodus bei Addition, Subtraktionen, Multiplikation und Division von Datentypen für Float, Double auch auf heutigen x86-CPUs einbricht.

Ich habe gehört, dass beim Ändern des Rundunsgmodus die Pipeline geleert wird. Hörensagen ist zwar schön und gut, aber ich hätte gern ein Papier (von intel oder AMD), wo das Schwarz auf Weiß steht bzw. sich aus der x86-Architektur des jeweiligen CPUs begründen lässt.

Marscel
2015-06-13, 20:38:31
Für die FPU: US-Patent 6405305 von AMD.

Und etwas jünger, das Intel 64 and IA-32 Architectures Optimization Reference Manual sagt, dass LDMXCSR ausführungserialisierend wirkt.

WarSlash
2015-06-13, 21:26:05
Für die FPU: US-Patent 6405305 von AMD.

Und etwas jünger, das Intel 64 and IA-32 Architectures Optimization Reference Manual sagt, dass LDMXCSR ausführungserialisierend wirkt.
Danke!

Berni
2015-06-14, 13:24:04
Interessantes Thema. Setzt du das Register per Assemblercode um oder geht das auch "in Schön" in C++? Wäre es unter Umständen möglich, ein explizites Runden einzubauen (Addieren/Subtrahieren von 0.5 und dann Cast auf int) um ein Switchen möglichst zu vermeiden (den Modus den man am Meisten braucht vorher setzen)? Wie stark bricht die Performance denn tatsächlich ein?

Trap
2015-06-14, 13:31:41
Wäre es unter Umständen möglich, ein explizites Runden einzubauen (Addieren/Subtrahieren von 0.5 und dann Cast auf int)?
Beim Rundungsmodus geht es nicht um Runden auf ganze Zahlen.

Der Rundungsmodus legt fest welcher Wert des Datentyp als Ergebnis gewählt wird, wenn das exakte Ergebnis nicht in dem Datentyp repräsentierbar ist. z.B. bei 1.0/10.0 - kann man sich ganz gut auf http://www.h-schmidt.net/FloatConverter/IEEE754de.html angucken

Gast
2015-07-12, 18:39:44
Neuere CPUs haben renaming für das FPU-Status-Register, das heißt es ist nicht mehr in jedem Fall serialisierend. Natürlich gibt es eine begrenzte Zahl an renames.