Warum verlangsamt das Ersetzen von 0.1f durch 0 in einer Schleife den Code um das 10-fache (C++, VS2010)?
Hallo zusammen! Ich bin neu in C++ und bin beim Profiling von Code auf ein sehr seltsames Problem gestoßen. Ich habe eine einfache Schleife, die die Summe der Quadrate berechnet. Hier ist der Code:
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0.1f; // Zeile A
sum += x * x;
}
```
Dieser Code läuft sehr schnell (etwa 0,2 Sekunden auf meinem Visual Studio 2010 im Release x64-Modus). Aber wenn ich `0.1f` durch `0` ersetze (einfach Null):
```cpp
float sum = 0.0f;
for (int i = 0; i < 100000000; ++i) {
float x = i * 0; // Zeile B
sum += x * x;
}
```
...dann sinkt die Leistung um das 10-fache! Der Code benötigt etwa 2 Sekunden. Ich verwende Visual Studio 2010, kompiliere im Release-Modus (/O2), SSE2 ist aktiviert. Warum passiert das? Schließlich sollte eine Multiplikation mit Null sogar schneller sein als
Noch keine Antworten.
Anmelden um eine Antwort zu hinterlassen
Blogs
Entwurfsmuster in C#: Vollständiger Leitfaden mit Codebeispielen