Рассмотрим следующий код:
#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;
}
Я неоднократно измеряю время выполнения внутреннего цикла. Результаты показаны на следующем графике (y: duration, x: repeat):
Что вызывает уменьшение времени выполнения цикла?
Среда: linux (ядро 4.2) @Intel i7-2600, скомпилированное с использованием: g++ -std=c++11 main.cpp -O0 -o main
Изменить 1
Вопрос не о оптимизации компилятора или тестах производительности. Вопрос в том, почему производительность со временем становится лучше. Я пытаюсь понять, что происходит во время выполнения.
Изменить 2
Как было предложено Vaughn Cato, я изменил политику масштабирования частоты процессора на " Производительность". Теперь я получаю следующие результаты:
Это подтверждает гипотезу Вона Катона. Извините за глупый вопрос.