¿Por qué el rendimiento de un programa en ejecución mejora con el tiempo?
Considere el siguiente código:
#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;
}
Mido repetidamente el tiempo de ejecución del interioren bucle. Los resultados se muestran en la siguiente gráfica (y: duración, x: repetición):
¿Qué está causando la disminución del tiempo de ejecución del bucle?
Ambiente:Linux (kernel 4.2) @ Intel i7-2600, compilado usando:g++ -std=c++11 main.cpp -O0 -o main
Editar 1
La pregunta esno se trata de la optimización del compilador o los puntos de referencia de rendimiento. La pregunta es por qué el rendimiento mejora con el tiempo. Estoy tratando de entender lo que sucede en tiempo de ejecución.
Editar 2
Según lo propuesto porVaughn Cato, He cambiado la política de escalado de frecuencia de la CPU a "Actuación". Ahora obtengo los siguientes resultados:
ConfirmaVaughn CatoLa conjetura de. Perdón por la tonta pregunta.