Por que o desempenho de um programa em execução melhora com o tempo?
Considere o seguinte 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;
}
Estou medindo repetidamente o tempo de execução do interiorpara laço. Os resultados são mostrados no seguinte gráfico (y: duração, x: repetição):
O que está causando a diminuição do tempo de execução do loop?
Meio Ambiente:linux (kernel 4.2) @ Intel i7-2600, compilado usando:g++ -std=c++11 main.cpp -O0 -o main
Editar 1
A questão énão se trata de otimização de compilador ou benchmarks de desempenho. A questão é: por que o desempenho melhora com o tempo? Estou tentando entender o que está acontecendo em tempo de execução.
Editar 2
Como proposto porVaughn Cato, Alterei a política de dimensionamento de frequência da CPU para "atuação". Agora estou obtendo os seguintes resultados:
ConfirmaVaughn Catoconjectura. Desculpe pela pergunta boba.