2016-06-07 8 views
-1

Ich Messung der CPU-Zeit eines Algorithmus:Warum die CPU-Zeit für denselben Eingang nicht konstant ist?

clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &start); 
loop 10000 times 
    <My algorithms here> 
clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &end); 
duration = (end.tv_sec - start.tv_sec) * 1000000000 + (end.tv_nsec - start.tv_nsec); // in nanoseconds 

Wie ich verstehe, CPU-Zeit hängt nicht auf I/O, Cache, ..., aber nur den Anweisungen:

CPU-Zeit (oder Prozesszeit) ist die Zeitmenge, für die eine zentrale Verarbeitungseinheit (CPU) zur Verarbeitung von Anweisungen eines Computerprogramms oder Betriebssystems verwendet wurde, im Gegensatz zu beispielsweise Warten auf Eingabe/Ausgabe (I/O) Operationen oder Eintritt in den Energiesparmodus (Leerlauf). (Wikipedia)

Für verschiedene Läufe verwende ich den gleichen Eingang, und der Algorithmus ist deterministisch, daher sollten die Anweisungen die gleichen sein. Warum ist die CPU-Zeit für verschiedene Läufe unterschiedlich?

+0

CPU-Cache fehlt. Variable CPU-Taktfrequenz (z. B. Intel SpeedStep und TurboBoost). Wenn Sie unter einem Hypervisor laufen, kann das auch Auswirkungen auf die Dinge haben. Dies sind alles Faktoren, die die CPU-Zeit eines Prozesses außerhalb von IO-Wartezeiten anpassen. – Dai

+0

Ich könnte mir vorstellen, dass andere Prozesse den gesamten Cache-Status beeinflussen, so dass die CPU zwischen zwei separaten Läufen möglicherweise nicht dieselben zwischengespeicherten Ressourcen hat. – Galik

Antwort

2

Es gibt viele Dinge im Hintergrund, die das CPU-Timing beeinflussen können, es sei denn, Sie laufen auf einem Mikrocontroller ohne Betriebssystem.

+0

Können Sie "viele Dinge, die vor sich gehen" ausarbeiten? Vielen Dank. – vhl

+0

Können Sie angeben, was das Betriebssystem ist? Es wird viele Dinge geben, die das OS im Hintergrund macht. – SPlatten

+0

Auch das System, auf dem Sie arbeiten, ist ein großer Faktor, zum Beispiel, wenn es auf Windows basiert, dann ist das Timing aufgrund der Auflösung der Systemuhr überhaupt nicht sehr genau. – SPlatten