Wie rufe ich clock()
an C++
?
Ich möchte beispielsweise testen, wie viel Zeit eine lineare Suche benötigt, um ein bestimmtes Element in einem Array zu finden.
c++
benchmarking
clock
dato datuashvili
quelle
quelle
perf stat -d ./a.out
Antworten:
quelle
clock()
undclock_t
stammen aus dem Header der C Standard Library vontime.h
und benötigen daherstd
nach der Aufnahme ihrer Bibliotheken keine Namespace-Präfixe.<ctime>
Umschließt diesen Wert und diese Funktion mit demstd
Namespace, muss jedoch nicht verwendet werden. Überprüfen Sie hier für Implementierungsdetails: en.cppreference.com/w/cpp/header/ctimeEine alternative Lösung, die portabel und präziser ist und seit C ++ 11 verfügbar ist, ist die Verwendung
std::chrono
.Hier ist ein Beispiel:
Das auf ideone.com auszuführen gab mir:
quelle
using Clock=std::chrono::high_resolution_clock;
. Siehe Typalias .std::chrono::high_resolution_clock
ist nicht bei allen Standard-Lib-Implementierungen monoton. Aus der Referenz - Im Allgemeinen sollte man nur std :: chrono :: stetige Uhr oder std :: chrono :: system_clock direkt anstelle von std :: chrono :: high_resolution_clock verwenden: benutze stetige Uhr für Dauermessungen und system_clock für die Wanduhrzeit.clock()
Gibt die Anzahl der Uhr-Ticks seit dem Start Ihres Programms zurück. Es gibt eine verwandte Konstante,CLOCKS_PER_SEC
die angibt, wie viele Taktstriche in einer Sekunde auftreten. So können Sie jede Operation wie folgt testen:quelle
timeInSeconds
kommt immer0.000000
für mich. Wie würde ich das beheben?long double
zu verwenden, um mehr Präzision zu erzielen .Zumindest unter Windows ist QueryPerformanceCounter (QPC) der einzige praktisch genaue Messmechanismus. std :: chrono wird damit implementiert (seit VS2015, wenn Sie das verwenden), aber es ist nicht in demselben Maße genau wie die direkte Verwendung von QueryPerformanceCounter. Insbesondere ist die Behauptung, bei 1 Nanosekunde Granularität zu melden, absolut nicht korrekt. Wenn Sie also etwas messen, das nur sehr kurze Zeit in Anspruch nimmt (und Ihr Fall könnte ein solcher Fall sein), sollten Sie QPC oder das Äquivalent für Ihr Betriebssystem verwenden. Ich bin beim Messen der Cache-Latenzen darauf gestoßen und habe einige Notizen notiert, die Sie hier möglicherweise nützlich finden. https://github.com/jarlostensen/notesandcomments/blob/master/stdchronovsqcp.md
quelle
quelle
Wahrscheinlich interessieren Sie sich für einen Timer wie diesen: H: M: S. Msec.
der Code in Linux OS:
quelle
usleep
nicht immer nach genau dem Betrag zurückkehren, den Sie angefordert haben. Manchmal wird es länger dauern. Sie sollten die aktuelle Zeit zu Beginn überprüfen, dann die aktuelle Zeit überprüfen und subtrahieren, um die absolute Zeit zu erhalten, seit Sie jedes Mal durch die Schleife gestartet sind.Sie können messen, wie lange Ihr Programm funktioniert. Die folgenden Funktionen helfen beim Messen der CPU-Zeit seit dem Start des Programms:
meine Referenz : Algorithmus Toolbox Woche 1 Kurs Teil der Spezialisierung auf Datenstrukturen und Algorithmen durch die University of California in San Diego und die Higher School of Economics der National Research University
Sie können diese Codezeile also nach Ihrem Algorithmus hinzufügen
Erwartete Ausgabe: Die Ausgabe, die die Anzahl von darstellt
clock ticks per second
quelle