По истечении времени, установленного микроархитектурой, и если ЦП может найти тот же запас тепловой мощности, включается масштабирование частоты, чтобы максимально увеличить тактовую частоту требовательного ядра (в пределах TDP).
Реализация Intel называется Turbo Boost .
Если вы отключите масштабирование частоты в своей системе (например, с помощью sudo cpupower frequency-set --governor performance
- cpupower
входит в пакет cpupowerutils
), время каждой итерации будет более или менее одинаковым.
Сам цикл очень легко предсказать, вы можете ожидать только несколько неправильных предсказаний, если не один в конце от элемента управления цикла - код внутри библиотеки C ++, вероятно, труднее предсказать, но даже при что BPU не займет столько времени (1000 итераций), чтобы догнать ваш код.
Таким образом, вы можете исключить ошибочное прогнозирование отрасли.
Более или менее то же самое применимо к I-кешу (мало используется D-кеш, если реализация библиотеки C ++ не была слишком интенсивной при использовании переменных).
Код должен быть достаточно маленьким, чтобы поместиться в L1-I, и в основном даже в DSB.
Промахи L1-I не требуют 1000 итераций для разрешения, и если в кэше возникнет серьезный конфликт наборов, который будет отображаться как общее замедление, которое не исчезнет после 1000 итераций.
Вообще говоря, известно, что код выполняется быстрее со второй итерации цепочки зависимостей, переносимых циклами, поскольку первый раз, когда ЦП заполняет кэши (данные, инструкции, TLB).
В конечном итоге он может снова замедлиться, если у ЦП закончились ресурсы, например, если имеется большое давление порта (например, множество идентичных инструкций с ограниченным портом с большой задержкой), RS может заполнить остановку FE или, если есть много загрузки / магазина, заполняющего MOB / SB / LB, или много прыжков, заполняющих BOB.
Однако эти эффекты очень быстро проявляются настолько, что они доминируют во время выполнения кода.
В этом случае замедление происходит очень и очень поздно (во время процессора), что заставляет задуматься о процессе по требованию, таком как Turbo boost.