Как отключить hyper threading
Перейти к содержимому

Как отключить hyper threading

Еще раз о Hyper-Threading

Было время, когда понадобилось оценить производительность памяти в контексте технологии Hyper-threading. Мы пришли к выводу, что ее влияние не всегда позитивно. Когда появился квант свободного времени, возникло желание продолжить исследования и рассмотреть происходящие процессы с точностью до машинных тактов и битов, используя программное обеспечение собственной разработки.

Исследуемая платформа

Объект экспериментов – ноутбук ASUS N750JK c процессором Intel Core i7-4700HQ. Тактовая частота 2.4GHz, повышаемая в режиме Intel Turbo Boost до 3.4GHz. Установлено 16 гигабайт оперативной памяти DDR3-1600 (PC3-12800), работающей в двухканальном режиме. Операционная система – Microsoft Windows 8.1 64 бита.

image
Рис.1 Конфигурация исследуемой платформы.

Процессор исследуемой платформы содержит 4 ядра, что при включении технологии Hyper-Threading обеспечивает аппаратную поддержку 8 потоков или логических процессоров. Эту информацию Firmware платформы передает операционной системе посредством ACPI-таблицы MADT (Multiple APIC Description Table). Поскольку платформа содержит только один контроллер оперативной памяти, таблица SRAT (System Resource Affinity Table), декларирующая приближенность процессорных ядер к контроллерам памяти, отсутствует. Очевидно, исследуемый ноутбук не является NUMA-платформой, но операционная система, в целях унификации, рассматривает его как NUMA-систему с одним доменом, о чем говорит строка NUMA Nodes = 1. Факт, принципиальный для наших экспериментов – кэш память данных первого уровня имеет размер 32 килобайта на каждое из четырех ядер. Два логических процессора, разделяющие одно ядро, используют кэш-память первого и второго уровней совместно.

Исследуемая операция

Исследовать будем зависимость скорости чтения блока данных от его размера. Для этого выберем наиболее производительный метод, а именно чтение 256-битных операндов посредством AVX-инструкции VMOVAPD. На графиках по оси X отложен размер блока, по оси Y – скорость чтения. В окрестности точки X, соответствующей размеру кэш-памяти первого уровня, ожидаем увидеть точку перегиба, поскольку производительность должна упасть после того, как обрабатываемый блок выйдет за пределы кэш-памяти. В нашем тесте, в случае многопоточной обработки, каждый из 16 инициируемых потоков, работает с отдельным диапазоном адресов. Для управления технологией Hyper-Threading в рамках приложения, в каждом из потоков используется API-функция SetThreadAffinityMask, задающая маску, в которой каждому логическому процессору соответствует один бит. Единичное значение бита разрешает использовать заданный процессор заданным потоком, нулевое значение – запрещает. Для 8 логических процессоров исследуемой платформы, маска 11111111b разрешает использовать все процессоры (Hyper-Threading включен), маска 01010101b разрешает использовать по одному логическому процессору в каждом ядре (Hyper-Threading выключен).

На графиках используются следующие сокращения:

MBPS (Megabytes per Second)скорость чтения блока в мегабайтах в секунду;

CPI (Clocks per Instruction)количество тактов на инструкцию;

TSC (Time Stamp Counter)счетчик процессорных тактов.

Примечание.Тактовая частота регистра TSC может не соответствовать тактовой частоте процессора при работе в режиме Turbo Boost. Это необходимо учитывать при интерпретации результатов.

В правой части графиков визуализируется шестнадцатеричный дамп инструкций, составляющих тело цикла целевой операции, выполняемой в каждом из программных потоков, или первые 128 байт этого кода.

Опыт №1. Один поток

image
Рис.2 Чтение одним потоком

Максимальная скорость 213563 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт.

Опыт №2. 16 потоков на 4 процессора, Hyper-Threading выключен

image
Рис.3 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно четырем

Hyper-Threading выключен. Максимальная скорость 797598 мегабайт в секунду. Точка перегиба имеет место при размере блока около 32 килобайт. Как и ожидалось, по сравнению с чтением одним потоком, скорость выросла приблизительно в 4 раза, по количеству работающих ядер.

Опыт №3. 16 потоков на 8 процессоров, Hyper-Threading включен

image
Рис.4 Чтение шестнадцатью потоками. Количество используемых логических процессоров равно восьми

Hyper-Threading включен. Максимальная скорость 800722 мегабайт в секунду, в результате включения Hyper-Threading почти не выросла. Большой минус – точка перегиба имеет место при размере блока около 16 килобайт. Включение Hyper-Threading немного увеличило максимальную скорость, но падение скорости теперь наступает при вдвое меньшем размере блока – около 16 килобайт, поэтому существенно упала средняя скорость. Это не удивительно, каждое ядро имеет собственную кэш-память первого уровня, в то время, как логические процессоры одного ядра, используют ее совместно.

Как отключить hyper threading

Настройка BIOS Setup />Процессор />CPU Hyper-Threading

Опция CPU Hyper-Threading позволяет включить/отключить поддержку процессором технологии Hyper-Threading (виртуальная многопоточность).

Enabled – включить поддержку процессором технологии Hyper-Threading;

Disabled – отключить поддержку процессором технологии Hyper-Threading.

Опция также может иметь другие названия:

Hyper-Threading Function

Hyper-Threading Technology

Примечание 1. Центральный процессор (ЦП, CPU) – это микросхема, которая является главным элементом аппаратного обеспечения компьютера. Центральный процессор обрабатывает код программ и руководит работой других устройств.

Примечание 2. Hyper-Threading (HT) – это технология одновременной параллельной обработки двух потоков команд процессором, что позволяет повысить производительность ЦП.

Как отключить hyper threading

ForposT_ForeveR

Цитата:

процессор на переключение между потоками тратит время

Если бы было такое длительное переключение — это было бы для процессора дополнительными накладными расходами.

Технология HT была внедрена, чтобы уменьшить простои ядра и за счет этого использовать его более эффективно (когда одному потоку какие-то вычислительные ресурсы ядра не нужны — их использует другой поток). А так как современное ядро содержит не одно универсальное арифметико-логическое устройство, как было в старых процессорах, а набор различных специализированных блоков, то обычно оказывается, что часть блоков все равно простаивает, так почему бы их не задействовать другим (параллельным) процессом — imho где-то такая логика была у разработчиков технологии. Дальше стали смотреть, а что нужно добавить в процессор, чтобы два (а можно было бы и больше) потока команд могли параллельно использовать эти вычислительны блоки — получилось, что удвоить нужно то, в чем программа (каждый поток) хранит свои данные и состояния, т.е. которые не должны быть изменены другим потоком. Таковыми оказались все программно доступные регистры и некоторые внутренние состояния (контроллер прерываний также содержит программно доступные регистры). Поскольку такая доделка ядра оказалась небольшой, это оказалось экономически эффективным решением.

суть не меняется. даже в такой интерпретации — это означает что ячеек для состояний процессора два набора, а логика одна, то есть фактически полторапроцессора, а не реальных два. и у процессора не два потока, а не сколько.

Цитата:

The hyper-threading technology found its roots in Digital Equipment Corporation[4] but was brought to the market by Intel. Hyper-Threading was first introduced in the Foster MP-based Xeon in March 2002. It appeared on the 3.06 GHz Northwood-based Pentium 4 in the same year, and then appeared in every Pentium 4 HT, Pentium 4 Extreme Edition and Pentium Extreme Edition processor. Previous generations of Intel's processors based on the Core microarchitecture do not have Hyper-Threading, because the Core microarchitecture is a descendant of the P6 microarchitecture used in iterations of Pentium since the Pentium Pro through the Pentium III and the Celeron (Covington, Mendocino, Coppermine and Tualatin-based) and the Pentium II Xeon and Pentium III Xeon models.

According to Intel the first implementation only used 5% more die area than the comparable non-hyperthreaded processor, but the performance was 15–30% better.[9]

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *