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();
  1. ADie CPU hat einen Spezialbefehl, der die Berechnung augenblicklich beendet
  2. BDa der Wert von x später nicht verwendet wird, hat der Compiler die Berechnung der Schleife als unnötig entfernt
  3. 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.

Dieses Thema üben Zur Themenseite

Weitere Fragen zu Leistungsbewertung und Profiling

  1. Warum wird die Ausführungszeit eines Programms oft mit vielen Wiederholungen gemessen und werden die Ergebnisse der ersten Läufe verworfen?
  2. Welche Kombination aus Problem und Gegenmaßnahme ist richtig, wenn man die Zeit einer sehr kurzen Verarbeitung nur einmal zu messen versucht?
  3. Worin besteht beim Messen der Ausführungszeit der Unterschied zwischen „Wanduhrzeit“ (Wall-Clock-Time) und „CPU-Zeit“?
  4. Welche Beschreibung von Durchsatz und Latenz bei der Serverleistung ist richtig?
  5. Warum wird bei der Bewertung der Antwortzeit eines Webdienstes häufig nicht nur der Mittelwert, sondern auch das 99. Perzentil (Grenze zu den langsamsten 1 %) betrachtet?