Warum wird die Leistung eines laufenden Programms mit der Zeit besser?
Betrachten Sie den folgenden Code:
#include <iostream>
#include <chrono>
using Time = std::chrono::high_resolution_clock;
using us = std::chrono::microseconds;
int main()
{
volatile int i, k;
const int n = 1000000;
for(k = 0; k < 200; ++k) {
auto begin = Time::now();
for (i = 0; i < n; ++i); // <--
auto end = Time::now();
auto dur = std::chrono::duration_cast<us>(end - begin).count();
std::cout << dur << std::endl;
}
return 0;
}
Ich messe immer wieder die Ausführungszeit des innerenfor loop. Die Ergebnisse sind in der folgenden Grafik dargestellt (y: Dauer, x: Wiederholung):
Was verkürzt die Ausführungszeit der Schleife?
Umgebung:linux (Kernel 4.2) @ Intel i7-2600, kompiliert mit:g++ -std=c++11 main.cpp -O0 -o main
Edit 1
Die Frage istnicht über Compiler-Optimierung oder Performance-Benchmarks. Die Frage ist, warum die Leistung mit der Zeit besser wird. Ich versuche zu verstehen, was zur Laufzeit passiert.
Edit 2
Wie von @ vorgeschlagVaughn Cato, Ich habe die CPU-Frequenzskalierungsrichtlinie in "@" geänderPerformanc ". Jetzt erhalte ich die folgenden Ergebnisse:
Es bestätigtVaughn Cato 's Vermutung. Entschuldigung für die dumme Frage.