Leistungsbewertung und Profiling
Beim Messen der Rechengeschwindigkeit mit einer kleinen Schleife wie oben war die Zeit auch bei großem N nahezu 0. Was ist die wahrscheinlichste Ursache?
start = now();
for (i = 0; i < N; i++)
x = a * b + i;
end = now();
- ADie CPU hat einen Spezialbefehl, der die Berechnung augenblicklich beendet
- BDa der Wert von x später nicht verwendet wird, hat der Compiler die Berechnung der Schleife als unnötig entfernt
- CDie Zeitfunktion ist defekt
Antwort und Erläuterung anzeigen
Antwort: B. Da der Wert von x später nicht verwendet wird, hat der Compiler die Berechnung der Schleife als unnötig entfernt
Ein Compiler mit aktivierter Optimierung entfernt Berechnungen, deren Ergebnis nicht verwendet wird, als unnötigen Code (Dead Code) oder ersetzt das Ergebnis einer Schleife durch eine Konstante. Bei Mikrobenchmarks, die nur einen kleinen Ausschnitt herausgreifen, wird die zu messende Berechnung daher mitunter gar nicht ausgeführt. Gegenmaßnahmen sind die Ausgabe des Ergebnisses, volatile oder Kniffe gegen Compileroptimierungen sowie die Prüfung des erzeugten Maschinencodes.