Ich habe festgestellt, dass die übliche Uhr (), die jeder hier empfiehlt, aus irgendeinem Grund stark von Lauf zu Lauf abweicht, selbst für statischen Code ohne Nebenwirkungen, wie Zeichnen auf dem Bildschirm oder Lesen von Dateien. Dies kann daran liegen, dass die CPU den Stromverbrauch ändert, das Betriebssystem unterschiedliche Prioritäten setzt usw.
Die einzige Möglichkeit, mit clock () jedes Mal zuverlässig das gleiche Ergebnis zu erzielen, besteht darin, den gemessenen Code mehrmals (mehrere Minuten lang) in einer Schleife auszuführen und dabei Vorsichtsmaßnahmen zu treffen, um zu verhindern, dass der Compiler ihn optimiert: Moderne Compiler können den Code vorberechnen ohne Nebenwirkungen, die in einer Schleife ausgeführt werden, und verschieben Sie sie aus der Schleife heraus, z. B. indem Sie für jede Iteration eine zufällige Eingabe verwenden.
Nachdem genügend Samples in einem Array gesammelt wurden, sortiert man dieses Array und nimmt das mittlere Element, den Median. Der Median ist besser als der Durchschnitt, da er extreme Abweichungen beseitigt, z. B. wenn Antivirenprogramme die gesamte CPU belegen oder das Betriebssystem Aktualisierungen vornimmt.
Hier ist ein einfaches Dienstprogramm zum Messen der Ausführungsleistung von C / C ++ - Code, bei dem die Werte nahe dem Median gemittelt werden: https://github.com/saniv/gauge
Ich selbst bin immer noch auf der Suche nach einer robusteren und schnelleren Methode zum Messen von Code. Man könnte wahrscheinlich versuchen, den Code unter kontrollierten Bedingungen auf Bare-Metal ohne Betriebssystem auszuführen, aber das führt zu einem unrealistischen Ergebnis, da in Wirklichkeit das Betriebssystem involviert ist.
x86 verfügt über diese Hardwareleistungsindikatoren, die die tatsächliche Anzahl der ausgeführten Anweisungen enthalten. Sie sind jedoch ohne Hilfe des Betriebssystems schwierig zuzugreifen, schwer zu interpretieren und haben ihre eigenen Probleme ( http://archive.gamedev.net/archive/reference/articles) /article213.html ). Dennoch könnten sie hilfreich sein, um die Art des Flaschenhalses zu untersuchen (Datenzugriff oder tatsächliche Berechnungen dieser Daten).