Новости

30.08.2017

Российская компания Positive Technologies анонсировала ...

  • Все новости (36)
  • Разделы новостей

    Публикации

    Майнеру на заметку

    Утилиты

    Реклама

    Обзоры компьютерных гаджетов, которые должны быть всегда под рукой

        Яндекс.Метрика
    Главная » Статьи » Intel Turbo Boost и точность бенчмарок

    Intel Turbo Boost и точность бенчмарок

    В ранее опубликованной статье «На что влияет Fast Strings?» мы исследовали влияние опции Fast Strings на производительность аппаратных циклов, реализуемых строковыми инструкциями процессора. Результат в целом получился ожидаемым, но есть одно «но»: количество тактов, затрачиваемое на итерации аппаратного цикла, несколько меньше теоретического минимума. Согласно нашей гипотезе, дело в технологиях динамического ускорения процессора, в частности Intel Turbo Boost, при работе которых тактовые частоты регистра-счетчика тактов TSC (Time Stamp Counter) и ядра процессора могут быть различными.

    Описание конфигурации стенда, условий эксперимента и исследуемой операции копирования блока посредством строковой инструкции REP MOVSQ, а также аргументация, почему опыты проводились в среде UEFI Shell, приведены в ранее опубликованном материале, поэтому не будем повторяться и перейдем непосредственно к предмету обсуждения.

    Как выключить динамическую акселерацию

    Согласно документации, для отключения динамической акселерации используется бит IDA/Turbo DISENGAGE в регистре IA32_PERF_CTL MSR.

    Бит IDA/Turbo DISENGAGE в регистре IA32_PERF_CTL MSR, это бит с номером 32. IDA расшифровывается как Intel Dynamic Acceleration
    Рис 1. Бит IDA/Turbo DISENGAGE в регистре IA32_PERF_CTL MSR, это бит с номером 32. IDA расшифровывается как Intel Dynamic Acceleration

    Нулевое состояние бита разрешает технологии динамической акселерации, единичное - запрещает. Чтобы получить «неразогнанный» процессор, не изменив состояние других управляющих полей этого регистра, необходимо выполнить операцию считывание-модификация-запись, при этом модификация состоит в операции ЛОГИЧЕСКОЕ ИЛИ с маской, содержащей единицу в бите 32 и нули в остальных битах.

    Эксперименты

    В ранее опубликованной статье мы использовали два приложения — sample1 и sample2. Чтобы сохранить нумерацию на протяжении всей серии экспериментов, начнем с sample3.

    Опыты 1 и 2 выполнены при включенной технологии динамической акселерации, а опыты 3 и 4 — при выключенной.

    Опыт 1

    Приложение sample3.efi (исходный текст sample3.asm) выполняет копирование блока, размером 16 килобайт с повтором 10000000 раз. Визуализируется текущее (установленное Firmware при старте) значение регистров IA32_MISC_ENABLE MSR и IA32_PERF_CTL MSR. Приложение измеряет количество процессорных тактов, затраченных на операцию и вычисляет количество байтов на одну итерацию аппаратного цикла инструкции REP MOVSQ. Результат таков:

    IA32_MISC_ENABLE MSR = 0000000000850089h
    IA32_PERF_CTL MSR = 0000000000002208h
    Delta TSC = 00000000FB58FF3Ch
    Bytes per TSC CLK = 38.85

    Переводя в двоичный код, увидим, что установлен бит 0 регистра IA32_MISC_ENABLE MSR, то есть режим быстрого выполнения строковых инструкций Fast Strings включен. Это означает, что теоретический максимум для скорости копирования блока — 256 бит или 32 байта за такт. Получен результат — 38.85 байт за такт. Предполагаемая причина такого несоответствия — технология Intel Turbo Boost, активность которой подтверждена нулевым значением бита 32 регистра IA32_PERF_CTL MSR.

    Опыт 2

    Приложение sample4.efi (исходный текст sample4.asm) выполняет аналогичную операцию, но с запретом режима Fast Strings.

    IA32_MISC_ENABLE MSR = 0000000000850088h
    IA32_PERF_CTL MSR = 0000000000002208h
    Delta TSC = 000000039A6AA6ABh
    Bytes per TSC CLK = 10.58

    Здесь теоретический максимум — 64 бита или 8 байт за такт. Получен результат — 10.58 байт за такт. Предполагаемая причина та же — работает Intel Turbo Boost.

    Опыт 3

    Приложение sample5.efi (исходный текст sample5.asm) выполняет копирование блока в режиме Fast Strings, предварительно отключив динамическую акселерацию установкой бита 32 в регистре IA32_PERF_CTL MSR.

    IA32_MISC_ENABLE MSR = 0000000000850089h
    IA32_PERF_CTL MSR = 0000000100002208h
    Delta TSC = 000000014F1DABE8h
    Bytes per TSC CLK = 29.14

    Количество байтов за такт по сравнению с опытом 1 уменьшилось до 29.14 и стало меньше теоретического максимума для Fast Strings — 32 байта или 256 бит за такт.

    Опыт 4

    Приложение sample6.efi (исходный текст sample6.asm) выполняет копирование блока при выключенном режиме Fast Strings, предварительно отключив динамическую акселерацию установкой бита 32 в регистре IA32_PERF_CTL MSR.

    IA32_MISC_ENABLE MSR = 0000000000850088h
    IA32_PERF_CTL MSR = 0000000100002208h
    Delta TSC = 00000004CDED9DA1h
    Bytes per TSC CLK = 7.93

    Количество байтов за такт по сравнению с опытом 2 уменьшилось до 7.93 и стало меньше теоретического максимума для работы без Fast Strings — 8 байт или 64 бита за такт.

    Резюме

    Дожили. Вместо обсуждения «как разогнать» перешли к вопросу «как выключить разгон». А дело тут в изменении позиции компании Intel по отношению к оверклокингу. От полного неприятия, имевшего место 10-15 лет назад, до появления «узаконенного разгона по умолчанию» в виде технологии Turbo Boost, позволяющей динамически поднимать тактовую частоту работающих ядер процессора в ситуации, когда часть ядер не активны и есть резерв по потребляемой мощности.

    Тем, кто пожелает повторить описанные эксперименты в среде операционных систем Windows или Linux, следует учесть, что Model-Specific регистры процессора являются привилегированным ресурсом, доступ к которому запрещен для программ, работающих в третьем кольце защиты или Ring3. Потребуется написать драйвер.



    24.09.2017