Окт 16

Использование команды RDTSC

Начиная с Pentium III, процессоры этого семейства содержат доступный для программистов счетчик меток реального времени TSC (Time Stamp Counter). Это 64-разрядный регистр, содержимое которого инкрементируется с каждым тактом процессорного ядра. Каждый раз при аппаратном сбросе (сигналом RESET) отсчет в счетчике TSC начинается с нуля. Разрядность регистра обеспечивает отсчет времени без переполнения в течение сотен лет.
Пропускная способность — это количество инструкций, выполняемых за один такт при условии их непрерывного продвижения по конвейеру. Латентностъ — это полное время прохождения одной команды по конвейеру. Продвижение машинных инструкций по конвейеру сопряжено с рядом принципиальных трудностей: то не готовы операнды, то занято исполнительное устройство, — и в каждом таком случае конвейер простаивает. При выполнении команд ветвления ситуация еще более неопределенная, так как конвейер заполняется микрооперациями в предположении, что вычисления пойдут по одной из ветвей. Впоследствии это предположение может оказаться ложным, и тогда процессор вынужден вернуться к точке ветвления.
В лучшем случае время выполнения одной инструкции определяется пропускной способностью конвейера, а в худшем — его латентностью. Длина конвейера в современных процессорах колеблется от 12 до 36 стадий. Опустив другие подробности, обсуждаемые в издании [8], приведем заключительную рекомендацию. Минимальный промежуток времени, которому еще можно верить при использовании команды rdtsc, составляет по меньше мере от пятидесяти до ста тактов.
Другая тонкость, которую надо учитывать при профилировке, — это режим компиляции. Напомним, что в среде Visual Studio 6.0 этот режим определяется конфигурацией проекта. Возможны две конфигурации: отладочная (Win32 Debug) и выпускная (Win32 Release). Так вот, если вы занимаетесь профилировкой, то используйте только выпускную конфигурацию! Иначе результаты будут искажены, поскольку в код отладочной конфигурации компилятор вставляет дополнительные отладочные инструкции.