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.

questionAnswers(2)

yourAnswerToTheQuestion