Heim > Backend-Entwicklung > C++ > Warum führt das Ersetzen von 0.1f durch 0 zu einer 10-fachen Leistungssteigerung in meinem Code?

Warum führt das Ersetzen von 0.1f durch 0 zu einer 10-fachen Leistungssteigerung in meinem Code?

DDD
Freigeben: 2024-12-19 18:13:15
Original
198 Leute haben es durchsucht

Why Does Replacing 0.1f with 0 Result in a 10x Performance Increase in My Code?

Einfluss subnormaler Gleitkommazahlen auf die Leistung

Im bereitgestellten Codeausschnitt wirkte sich eine geringfügige Änderung, die unbedeutend schien, erheblich auf die Leistung aus: Änderung 0,1f auf 0 führte zu einer 10-fachen Verlangsamung. Dieser Leistungsunterschied ergibt sich aus der Handhabung subnormaler (denormalisierter) Gleitkommazahlen.

Subnormale Zahlen stellen eine Annäherung an Null dar und sind kleiner als die kleinste darstellbare normale Gleitkommazahl. Sie resultieren häufig aus Operationen, die sehr kleine Werte erzeugen. Operationen mit subnormalen Zahlen sind im Vergleich zu Operationen mit normalisierten Gleitkommazahlen notorisch langsam. Dies liegt daran, dass viele Prozessoren nicht in der Lage sind, subnormale Zahlen direkt zu verarbeiten, und stattdessen auf langsamere Mikrocode-Routinen zurückgreifen müssen.

Numerische Untersuchung

Die beiden Codeausschnitte, einer mit 0,1 f und der andere mit 0 erzeugen nach wiederholten Iterationen unterschiedliche Ausgaben. Bei Verwendung von 0,1f konvergieren die Werte zu Werten ungleich Null nahe Null. Bei Verwendung von 0 konvergieren die Werte jedoch gegen Null. Dieser Unterschied im numerischen Verhalten erklärt die Leistungslücke.

Denormal Flushing

Um zu überprüfen, ob subnormale Zahlen für die Leistungsunterschiede verantwortlich sind, können wir sie durch Addition auf Null leeren die folgende Zeile am Anfang des Codes:

_MM_SET_FLUSH_ZERO_MODE(_MM_FLUSH_ZERO_ON);
Nach dem Login kopieren

Dies weist den Prozessor an, alle subnormalen Zahlen als Null zu behandeln. Mit dieser Änderung wird der Leistungsunterschied zwischen der Verwendung von 0,1f und 0 vernachlässigbar. Dies bestätigt, dass subnormale Zahlen tatsächlich die Ursache der Verlangsamung sind.

Schlussfolgerung

In diesem Szenario verbessert sich die Vermeidung der Entstehung subnormaler Zahlen durch Ersetzen von 0,1f durch 0 erheblich Leistung, indem verhindert wird, dass der Prozessor langsame, unterdurchschnittliche Zahlenverarbeitungsroutinen ausführt. Diese Optimierung erinnert an die manchmal nachteiligen Auswirkungen denormalisierter Gleitkommazahlen auf die Leistung und daran, wie wichtig es ist, ihre potenzielle Präsenz in numerischen Berechnungen zu berücksichtigen.

Das obige ist der detaillierte Inhalt vonWarum führt das Ersetzen von 0.1f durch 0 zu einer 10-fachen Leistungssteigerung in meinem Code?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage