¿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.

Respuestas a la pregunta(2)

Su respuesta a la pregunta