9 Stimmen

schnell verstrichene Zeit unter Linux

Ich suche nach einer schnellen Möglichkeit, die verstrichene Zeit zwischen zwei Aufrufen einer Funktion in C zu ermitteln.

Ich habe überlegt, Jiffies zu verwenden, aber die sind im Userland nicht verfügbar. Sollte ich also getimeofday() verwenden oder gibt es einen schnelleren Weg, dies zu tun.

Ich bin nur an der Zeitspanne zwischen zwei Aufrufen interessiert, um sie in einem Benchmark-Tool zu verwenden.

9voto

Martin B Punkte 22930

をご覧ください。 clock_gettime die den Zugriff auf hochauflösende Timer ermöglicht.

9voto

Christoph Punkte 157217

Ich würde die Prozessorzeit über clock() de time.h . Um nützliche Werte zu erhalten, konvertieren Sie in Millisekunden über CLOCKS_PER_SEC :

clock_t start = clock();
// [...]
clock_t end = clock();
unsigned long millis = (end - start) * 1000 / CLOCKS_PER_SEC;

3voto

swatkat Punkte 4555

Ja, gettimeofday() würde ausreichen, wenn Sie die tatsächlich verstrichene Zeit ermitteln wollen. Wenn Sie die CPU-Zeit ermitteln müssen, können Sie clock() verwenden. In vielen Fällen würden beide Ansätze ähnliche Ergebnisse liefern (es sei denn, es gibt einen Sleep oder eine Art von Wartezeit im Code). Ein Beispiel für clock() finden Sie hier:
http://www.cs.utah.edu/dept/old/texinfo/glibc-manual-0.02/library_19.html

2voto

Wenn Sie eine x86/x64-Architektur verwenden und auf einer einzelnen CPU arbeiten, können Sie den Zeitstempelzähler der CPU auslesen, um einen Zykluszähler zu erhalten. Wikipedia hat mehr Informationen . Beachten Sie, dass dieser Ansatz weniger nützlich ist, wenn Ihre Anwendung auf mehreren CPUs läuft, da jede CPU ihren eigenen TSC hat. Seien Sie auch vorsichtig mit der Frequenzskalierung, wenn Sie entscheiden, dass Sie Zyklen -> Zeiteinheiten konvertieren wollen.

1voto

mark4o Punkte 55639

Wenn Ihr Kernel Folgendes unterstützt gettimeofday() als Vsyscall (virtueller Systemaufruf) verwenden, dann ist dies schneller als der Aufruf eines regulären Systemaufrufs wie clock() . Siehe Vortrag von Andrea Arcangeli für einige Informationen über die Funktionsweise von vsyscalls.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X