Ich habe so etwas:
%Vor%und ich bekomme immer als Ausgabe "Taktzyklen sind: 0 - 0"
Irgendeine Idee, warum das passiert?
(Um nur ein paar Details zu nennen, führt die something_else () - Funktion eine Potenzierung von links nach rechts mit Hilfe der Montgomery-Darstellung durch. Außerdem weiß ich nicht, dass die something_else () - Funktion tatsächlich eine nicht vernachlässigbare Zeit benötigt.)
Dies ist unter Linux. Das Ergebnis von uname -a ist:
Linux snowy.*****.ac.uk 2.6.32-71.el6.x86_64 #1 SMP Fri May 20 03:51:51 BST 2011 x86_64 x86_64 x86_64 GNU/Linux
clock
function misst keine CPU-Taktzyklen.
C sagt clock
"gibt die beste Annäherung der Implementierung an den Prozessor zurück
Zeit, die das Programm seit Beginn einer implementationsdefinierten Ära verwandt hat
nur zum Programmaufruf. "
Wenn zwischen zwei aufeinander folgenden clock
das Programm weniger Zeit benötigt als eine Einheit der Funktion clock
, könnten Sie 0
erhalten.
POSIX clock
definiert die Einheit mit CLOCKS_PER_SEC
als 1000000 (Einheit ist dann 1 Mikrosekunde).
Um Taktzyklen in x86 / x64 zu messen, können Sie die Taktzahl des CPU-Zeitstempelzähler-Registers rdtsc
durch Inline-Assemblierung abrufen.
Ich vermute, der Grund ist, dass Ihr something_else()
so wenig Zeit verbraucht, dass die Genauigkeit von clock()
überschritten wird. Ich habe versucht, clock()
zweimal konsequent aufzurufen, und sowohl start
als auch end
ist null, aber das Ergebnis ist vernünftig, wenn ich zeitraubendes Zeug dazwischen tue.
Hier ist mein Testcode-Snippet:
%Vor%Und das Ergebnis auf meinem Computer ist:
%Vor%Auch zwei Tipps:
something_else()
zeitaufwendig ist, aber der Compiler ignoriert diese Operationen (besonders Schleifen), da sie sie für bedeutungslos halten. sizeof(clock_t)
auf Ihrer Plattform, um die Größe von clock_t
zu sehen. Nun, willst du die Zeit, die something_else()
braucht? Versuchen Sie Folgendes:
}
Überprüfen Sie den Wert von CLOCKS_PER_SEC
in time.h/clock.h
. Auf meinem System zum Beispiel (Dev Cpp unter Windows 7) ist es nur ein 1000
. Soweit es mein Programm betrifft, gibt es 1000 Ticks pro Sekunde. Ihre something_else
würde innerhalb von Mikrosekunden ausgeführt werden. Und daher gibt clock()
vor und nach dem Funktionsaufruf null zurück.
Auf meinem System, wenn ich Ihre something_else
durch eine zeitaufwendige Routine wie diese ersetzen
Ich bekomme
Taktzyklen sind: 10236 - 20593
Auf einem der Linux-Boxen finde ich folgendes in bits/time.h
Berücksichtigen Sie dies, bevor Sie den Rückgabewert von clock()
Ich habe das kleine Programm unten verwendet, um Wanduhrzeit und CPU-Zeit zu untersuchen.
Auf meinem Testsystem druckt dies
CLOCKS_PER_SEC 1000000
CPU time usage resolutio
n scheint 0.010000 seconds
gettimeofday wurde um 9634 uS
geändert, wenn sich die CPU-Zeit um 0.010000
gettimeofday Auflösung scheint 1 us
zu sein %Vor%