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?
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
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