Что такое hyper threading в процессорах. Что такое Hyper-threading в процессорах Intel? Одновременное решение разных задач

Было время, когда понадобилось оценить производительность памяти в контексте технологии 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 бита.

Рис.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. Один поток



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

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

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



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

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

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



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

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

Выводы

Исследованная операция достаточно хорошо масштабируется на многоядерном процессоре. Причины – каждое из ядер содержит собственную кэш-память первого и второго уровней, размер целевого блока сопоставим с размером кэш-памяти, и каждый из потоков работает со своим диапазоном адресов. В академических целях мы создали такие условия в синтетическом тесте, понимая, что реальные приложения обычно далеки от идеальной оптимизации. А вот включение Hyper-Threading, даже в этих условиях дало негативный эффект, при небольшой прибавке пиковой скорости, имеет место существенный проигрыш в скорости обработки блоков, размер которых находится в диапазоне от 16 до 32 килобайт.

В прошлом мы рассказывали о технологии одновременной многопоточности (Simultaneous Multi-Threading - SMT), которая применяется в процессорах Intel. И хотя первоначально она создавалась под кодовым именем "технология Джексона" (Jackson Technology) как возможный, вероятный вариант, Intel официально анонсировала свою технологию на форуме IDF прошлой осенью. Кодовое имя Jackson было заменено более подходящим Hyper-Threading. Итак, для того чтобы разобраться, как работает новая технология, нам нужны кое-какие первоначальные знания. А именно, нам нужно знать, что такое поток, как выполняются эти потоки. Почему работает приложение? Как процессор узнает, какие операции и над какими данными он должен совершать? Вся эта информация содержится в откомпилированном коде выполняемого приложения. И как только приложение получает от пользователя какую-либо команду, какие-либо данные, – процессору сразу же отправляются потоки, в результате чего он и выполняет то, что должен выполнить в ответ на запрос пользователя. С точки зрения процессора, поток – это набор инструкций, которые необходимо выполнить. Когда в вас попадает снаряд в Quake III Arena, или когда вы открываете документ Microsoft Word, процессору посылается определенный набор инструкций, которые он должен выполнить.

Процессор точно знает, где брать эти инструкции. Для этой цели предназначен редко упоминаемый регистр, называемый счетчиком команд (Program Counter, PC). Этот регистр указывает на место в памяти, где хранится следующая для выполнения команда. Когда поток отправляется на процессор, адрес памяти потока загружается в этот счетчик команд, чтобы процессор знал, с какого именно места нужно начать выполнение. После каждой инструкции значение этого регистра увеличивается. Весь этот процесс выполняется до завершения потока. По окончании выполнения потока, в счетчик команд заносится адрес следующей инструкции, которую нужно выполнить. Потоки могут прерывать друг друга, при этом процессор запоминает значение счетчика команд в стеке и загружает в счетчик новое значение. Но ограничение в этом процессе все равно существует – в каждую единицу времени можно выполнять лишь один поток.

Существует общеизвестный способ решения данной проблемы. Заключается он в использовании двух процессоров – если один процессор в каждый момент времени может выполнять один поток, то два процессора за ту же единицу времени могут выполнять уже два потока. Отметим, что этот способ не идеален. При нем возникает множество других проблем. С некоторыми, вы уже, вероятно, знакомы. Во-первых, несколько процессоров всегда дороже, чем один. Во-вторых, управлять двумя процессорами тоже не так-то просто. Кроме того, не стоит забывать о разделении ресурсов между процессорами. Например, до появления чипсета AMD 760MP, все x86 платформы с поддержкой многопроцессорности разделяли всю пропускную способность системной шины между всеми имеющимися процессорами. Но основной недостаток в другом – для такой работы и приложения, и сама операционная система должны поддерживать многопроцессорность. Способность распределить выполнение нескольких потоков по ресурсам компьютера часто называют многопоточностью. При этом и операционная система должна поддерживать многопоточность. Приложения также должны поддерживать многопоточность, чтобы максимально эффективно использовать ресурсы компьютера. Не забывайте об этом, когда мы будем рассматривать ещё один подход решения проблемы многопоточности, новую технологию Hyper-Threading от Intel.

Производительности всегда мало

Об эффективности всегда много говорят. И не только в корпоративном окружении, в каких-то серьезных проектах, но и в повседневной жизни. Говорят, homo sapiens лишь частично задействуют возможности своего мозга. То же самое относится и к процессорам современных компьютеров.

Взять, к примеру, Pentium 4. Процессор обладает, в общей сложности, семью исполнительными устройствами, два из которых могут работать с удвоенной скоростью – две операции (микрооперации) за такт. Но в любом случае, вы бы не нашли программы, которая смогла бы заполнить инструкциями все эти устройства. Обычные программы обходятся несложными целочисленными вычислениями, да несколькими операциями загрузки и хранения данных, а операции с плавающей точкой остаются в стороне. Другие же программы (например, Maya) главным образом загружают работой устройства для операций с плавающей точкой.

Чтобы проиллюстрировать ситуацию, давайте вообразим себе процессор с тремя исполнительными устройствами: арифметико-логическим (целочисленным – ALU), устройством для работы с плавающей точкой (FPU), и устройством загрузки/хранения (для записи и чтения данных из памяти). Кроме того, предположим, что наш процессор может выполнять любую операцию за один такт и может распределять операции по всем трем устройствам одновременно. Давайте представим, что к этому процессору на выполнение отправляется поток из следующих инструкций:

Рисунок ниже иллюстрирует уровень загруженности исполнительных устройств (серым цветом обозначается незадействованное устройство, синим – работающее устройство):

Итак, вы видите, что в каждый такт используется только 33% всех исполнительных устройств. В этот раз FPU остается вообще незадействованным. В соответствии с данными Intel, большинство программ для IA-32 x86 используют не более 35% исполнительных устройств процессора Pentium 4.

Представим себе ещё один поток, отправим его на выполнение процессору. На этот раз он будет состоять из операций загрузки данных, сложения и сохранения данных. Они будут выполняться в следующем порядке:

И снова загруженность исполнительных устройств составляет лишь на 33%.

Хорошим выходом из данной ситуации будет параллелизм на уровне инструкций (Instruction Level Parallelism - ILP). В этом случае одновременно выполняются сразу нескольких инструкций, поскольку процессор способен заполнять сразу несколько параллельных исполнительных устройств. К сожалению, большинство x86 программ не приспособлены к ILP в должной степени. Поэтому приходится изыскивать другие способы увеличения производительности. Так, например, если бы в системе использовалось сразу два процессора, то можно было бы одновременно выполнять сразу два потока. Такое решение называется параллелизмом на уровне потоков (thread-level parallelism, TLP). К слову сказать, такое решение достаточно дорогое.

Какие же ещё существуют способы увеличения исполнительной мощи современных процессоров архитектуры x86?

Hyper-Threading

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

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

Hyper-Threading – это название технологии, существовавшей и ранее вне x86 мира, технологии одновременной многопоточности (Simultaneous Multi-Threading, SMT). Идея этой технологии проста. Один физический процессор представляется операционной системе как два логических процессора, и операционная система не видит разницы между одним SMT процессором или двумя обычными процессорами. В обоих случаях операционная система направляет потоки как на двухпроцессорную систему. Далее все вопросы решаются на аппаратном уровне.

В процессоре с Hyper-Threading каждый логический процессор имеет свой собственный набор регистров (включая и отдельный счетчик команд), а чтобы не усложнять технологию, в ней не реализуется одновременное выполнение инструкций выборки/декодирования в двух потоках. То есть такие инструкции выполняются поочередно. Параллельно же выполняются лишь обычные команды.

Официально технология была объявлена на форуме Intel Developer Forum прошлой осенью. Технология демонстрировалась на процессоре Xeon, где проводился рендеринг с помощью Maya. В этом тесте Xeon с Hyper-Threading показал на 30% лучшие результаты, чем стандартный Xeon. Приятный прирост производительности, но больше всего интересно то, что технология уже присутствует в ядрах Pentium 4 и Xeon, только она выключена.

Технология пока ещё не выпущена, однако те из вас, кто приобрел 0,13 мкм Xeon, и установил этот процессор на платы с обновленным BIOS, наверняка были удивлены, увидев в BIOS опцию включения/отключения Hyper-Threading.

А пока Intel будет оставлять опцию Hyper-Threading отключенной по умолчанию. Впрочем, для ее включения достаточно просто обновить BIOS. Все это касается рабочих станций и серверов, что же до рынка персональных компьютеров, в ближайшем будущем у компании планов касательно этой технологии не имеется. Хотя возможно, производители материнских плат предоставят возможность включить Hyper-Threading с помощью специального BIOS.

Остается очень интересный вопрос, почему Intel хочет оставить эту опцию выключенной?

Углубляемся в технологию

Помните те два потока из предыдущих примеров? Давайте на этот раз предположим, что наш процессор оснащен Hyper-Threading. Посмотрим, что получится, если мы попытаемся одновременно выполнить эти два потока:

Как и ранее, синие прямоугольники указывают на выполнение инструкции первого потока, а зеленые - на выполнение инструкции второго потока. Серые прямоугольники показывают незадействованные исполнительные устройства, а красные - конфликт, когда на одно устройство пришло сразу две разных инструкции из разных потоков.

Итак, что же мы видим? Параллелизм на уровне потоков дал сбой – исполнительные устройства стали использоваться ещё менее эффективно. Вместо параллельного выполнения потоков, процессор выполняет их медленнее, чем если бы он выполнял их без Hyper-Threading. Причина довольно проста. Мы пытались одновременно выполнить сразу два очень похожих потока. Ведь оба они состоят из операций по загрузке/сохранению и операций сложения. Если бы мы параллельно запускали "целочисленное" приложение и приложение, работающее с плавающей точкой, мы бы оказались куда в лучшей ситуации. Как видим, эффективность Hyper-Threading сильно зависит от вида нагрузки на ПК.

В настоящий момент, большинство пользователей ПК используют свой компьютер примерно так, как описано в нашем примере. Процессор выполняет множество очень схожих операций. К сожалению, когда дело доходит до однотипных операций, возникают дополнительные сложности с управлением. Случаются ситуации, когда исполнительных устройств нужного типа уже не осталось, а инструкций, как назло, вдвое больше обычного. В большинстве случаев, если бы процессоры домашних компьютеров использовали технологию Hyper-Threading, то производительность бы от этого не увеличилась, а может быть, даже снизилась на 0-10%.

На рабочих же станциях возможностей для увеличения производительности у Hyper-Threading больше. Но с другой стороны, все зависит от конкретного использования компьютера. Рабочая станция может означать как high-end компьютер для обработки 3D графики, так и просто сильно нагруженный компьютер.

Наибольший же прирост в производительности от использования Hyper-Threading наблюдается в серверных приложениях. Главным образом это объясняется широким разнообразием посылаемых процессору операций. Сервер баз данных, использующих транзакции, может работать на 20-30% быстрее при включенной опции Hyper-Threading. Чуть меньший прирост производительности наблюдается на веб-серверах и в других сферах.

Максимум эффективности от Hyper-Threading

Вы думаете, Intel разработала Hyper-Threading только лишь для своей линейки серверных процессоров? Конечно же, нет. Если бы это было так, они бы не стали впустую тратить место на кристалле других своих процессоров. По сути, архитектура NetBurst, использующаяся в Pentium 4 и Xeon, как нельзя лучше подходит для ядра с поддержкой одновременной многопоточности. Давайте ещё раз представим себе процессор. На этот раз в нем будет ещё одно исполнительное устройство – второе целочисленное устройство. Посмотрим, что случится, если потоки будут выполняться обоими устройствами:

С использованием второго целочисленного устройства, единственный конфликт случился только на последней операции. Наш теоретический процессор в чем-то похож на Pentium 4. В нем имеется целых три целочисленных устройства (два ALU и одно медленное целочисленное устройство для циклических сдвигов). А что ещё более важно, оба целочисленных устройства Pentium 4 способны работать с двойной скоростью – выполнять по две микрооперации за такт. А это, в свою очередь, означает, что любое из этих двух целочисленных устройств Pentium 4/Xeon могло выполнить те две операции сложения из разных потоков за один такт.

Но это не решает нашей проблемы. Было бы мало смысла просто добавлять в процессор дополнительные исполнительные устройства с целью увеличения производительности от использования Hyper-Threading. С точки зрения занимаемого на кремнии пространства это было бы крайне дорого. Вместо этого, Intel предложила разработчикам оптимизировать программы под Hyper-Threading.

Используя инструкцию HALT, можно приостановить работу одного из логических процессоров, и тем самым увеличить производительность приложений, которые не выигрывают от Hyper-Threading. Итак, приложение не станет работать медленнее, вместо этого один из логических процессоров будет остановлен, и система будет работать на одном логическом процессоре – производительность будет такой же, что и на однопроцессорных компьютерах. Затем, когда приложение сочтет, что от Hyper-Threading оно выиграет в производительности, второй логический процессор просто возобновит свою работу.

На веб-сайте Intel имеется презентация , описывающая, как именно необходимо программировать, чтобы извлечь из Hyper-Threading максимум выгоды.

Выводы

Хотя мы все были крайне обрадованы, когда до нас дошли слухи об использовании Hyper-Threading в ядрах всех современных Pentium 4/Xeon, все же это не будет бесплатной производительностью на все случаи жизни. Причины ясны, и технологии предстоит преодолеть ещё многое, прежде чем мы увидим Hyper-Threading, работающую на всех платформах, включая домашние компьютеры. А при поддержке разработчиков, технология определенно может оказаться хорошим союзником Pentium 4, Xeon, и процессорам будущего поколения от Intel.

При существующих ограничениях и при имеющейся технологии упаковки, Hyper-Threading кажется более разумным выбором для потребительского рынка, чем, например, подход AMD в SledgeHammer – в этих процессорах используется целых два ядра. И до тех пор, пока не станут совершенными технологии упаковки, такие как Bumpless Build-Up Layer , стоимость разработки многоядерных процессоров может оказаться слишком высокой.

Интересно заметить, насколько разными стали AMD и Intel за последние несколько лет. Ведь когда-то AMD практически копировала процессоры Intel. Теперь же компании выработали принципиально иные подходы к будущим процессорам для серверов и рабочих станций. AMD на самом деле проделала очень длинный путь. И если в процессорах Sledge Hammer действительно будут использоваться два ядра, то по производительности такое решение будет эффективнее, чем Hyper-Threading. Ведь в этом случае кроме удвоения количества всех исполнительных устройств снимаются проблемы, которые мы описали выше.

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

Под названием Hyper-Threading.

Терминология

Терминология в мире технологий может быть запутанной и легко
забывается, поэтому давайте начнем с разъяснения значения терминов,
которые я буду использовать здесь. Многоядерным процессором называется
процессор, содержащий более одного ядра в одной интегральной схеме.
Многочиповый означает несколько микросхем, объединенных вместе.
Многопроцессорный означает несколько отдельных процессоров, совместно
работающих в одной системе. И конечно, ЦП означает центральный
процессор, имеющий одно или более ядер, каждое из которых имеет
устройство выполнения (с которого и выполняется вся математика).

Hyper-Threading

Так что же такое технология hyper-threading? Термин Hyper-threading
используется компанией Intel для определения их технологии, которая
позволяет операционной системе воспринимать одно ядро ЦП, как два ядра.
Таким образом, операционная система работает с таким ядром так же, как с
любым многоядерным чипом, направляя на него одновременно несколько
процессов. Хотя при помощи этой технологии можно заставить систему
воспринимать одно ядро, как три или более ядер, сложность архитектуры
ограничила компанию Intel до выпуска hyper-threaded ядер, которые могут
восприниматься только как два ядра.

Здесь нет никакого фокуса. Компания Intel разработала архитектуру
чипа для обработки процессов так же, как это делают многоядерные
процессоры. По сути, компания Intel дублировала интенсивно используемые
области ядра ЦП и обеспечила использование этих секций несколькими
процессами одновременно. Поскольку эти области ядра являются раздельными
(они находятся на одном кристалле, но используют различные области
этого кристалла), эти процессы не мешают друг другу. Такие
hyper-threading-совместимые ядра представляют собой не совсем то же
самое, что многоядерные процессоры; не любой процесс может одновременно
выполняться с другим процессом, он должен использовать отдельную часть
ядра для своих операций.

Hyper-threading представляет собой пример одновременной
многопоточности (Simultaneous Multi-Threading - SMT). SMT является одним
из двух типов многопоточности. Другой тип называется временной
многопоточностью (Temporal Multi-Threading - TMT). При TMT ядро
процессора выполняет инструкции сначала от одного потока, затем от
другого, и затем снова от первого, и поэтому пользователю кажется, что
выполняется сразу два потока, когда на самом деле потоки просто делят
время ЦП между собой. При SMT инструкции от каждого потока могут
выполняться одновременно. Эти технологии могут использоваться для
повышения производительности.

Пользователям также следует знать, что не все ОС поддерживают
технологию hyper-threading. По заявлению компании Intel следующие ОС от
Microsoft полностью оптимизированы под поддержку технологии
hyper-threading:

    Microsoft Windows XP Professional Edition

    Microsoft Windows XP Home Edition

    Microsoft Windows Vista Home Basic

    Microsoft Windows Vista Home Premium

    Microsoft Windows Vista Home Ultimate

    Microsoft Windows Vista Home Business

И как говорят в компании Intel, следующие ОС не полностью
оптимизированы под технологию hyper-threading, и поэтому данная
технология должна быть отключена в настройках BIOS:

    Microsoft Windows 2000 (все версии)

    Microsoft Windows NT 4.0

    Microsoft Windows ME

    Microsoft Windows 98

    Microsoft Windows 98 SE

Иногда у таких приложений, как FireFox ,
возникают проблемы с hyper-threading. Лучшим способом решения этой
проблемы является запуск приложения в режиме совместимости с Windows 98.
Для этого нужно нажать правой клавишей мыши на значке приложения,
перейти в свойства, выбрать совместимость и отметить флажком опцию
"Запустить приложение в режиме совместимости (Run this program in
compatibility mode)", выбрав Windows 98. Это отключит технологию
hyper-threading для данного приложения, поскольку Windows 98 не
поддерживает hyper-threading.

Преимущества Hyper-Threading

Есть множество преимуществ hyper-threading. Компания Intel
утверждает, что дублирование определенных областей ядра ЦП увеличивает
размер ядра примерно на 5 процентов, но при этом обеспечивает прирост
производительности на 30 процентов по сравнению с другими идентичными
ядрами процессоров без hyper-threading.

Недостатки Hyper-Threading

advertisement

//
//]]-->



Хотя hyper-threaded ядра ЦП не обеспечивают полного объема
преимуществ многоядерных процессоров, они все же имеют значительные
преимущества по сравнению с обычными одноядерными процессорами. Конечно,
всегда полезно знать о том, какие недостатки имеются у технологии,
прежде чем ее использовать. Одним недостатком многих применений является
высокий уровень энергопотребления. Поскольку все области ядра нуждаются
в питании (даже в режиме ожидания), общий уровень энергопотребления
hyper-threading ядер, а также всех ядер с поддержкой SMT, выше. Без
максимального использования улучшений скорости, предлагаемых
hyper-threaded ядром, оно просто будет ядром, потребляющим больше
электроэнергии. Для многих ситуаций, включая фермы серверов, и мобильные
компьютеры, такое повышенное энергопотребление нежелательно.

Более того, если сравнить hyper-threaded ядро ЦП с non-hyper-threaded
ядром, вы заметите значительное повышение переполнения кэша. ARM
утверждает, что это повышение может составлять до 42%. Сравните это
значение с многоядерными процессорами, где переполнение кэша снижено на
37%, и это действительно станет важным.

Теперь, после прочтения информации обо всех этих недостатках вы,
возможно, решите, что эти hyper-threaded ядра бесполезны. И вы правы, в
некоторых ситуациях. Например, если энергопотребление является основным
аспектом в вашей ситуации, то hyper-threaded ядра (или любые другие ядра
с поддержкой SMT) будут нежелательными. Однако даже если потребление
мощности стоит высоко в списке ваших требований, hyper-threaded ядра
могут быть подходящим вариантом. Возьмём для примера серверную ферму.
Обычно во внимание принимается энергопотребление фермами серверов (эти
счета могут составлять многие тысячи долларов в месяц!). Однако в
сегодняшних фермах серверов многие серверы являются виртуальными.
Поэтому вполне может быть, что у вас есть несколько виртуальных серверов
на одном физическом сервере, при этом требования производительности
этих серверов не выше среднего. Вполне возможно, что такой тип
конфигурации обеспечит достаточный уровень использования ЦП, чтобы
использовать максимальный объем производительности hyper-threaded ядер,
при этом энергопотребление будет сведено до минимума.

Как всегда, важно четко учитывать все рабочие обстоятельства, прежде
чем решить использовать технологию. Технологий без недостатков
практически не бывает. Как правило, польза или бесполезность
определенной технологии применительно к вашей ситуации выявляется только
после тщательного пересмотра всех ее достоинств и недостатков.
Hyper-threading - это всего лишь технология. Для дополнительной
информации по этой теме рекомендую прочесть две мои предыдущие статьи. Во-первых, статью о , в которой объясняется, как многоядерные процессоры получают доступ к кэш-памяти. Во-вторых, мою статью о сродстве процессоров ,
в которой говорится о взаимодействии между приложениями и
множественными ядрами. Если у вас возникли вопросы о моей статье,
присылайте их мне на почту, и я постараюсь ответить как можно быстрее.

Рассел
Хичкок (Russell Hitchcock) работает консультантом, в его обязанности
входит сетевое аппаратное обеспечение (networked hardware), контрольные
системы и антенны. Рассел также пишет технические статьи на различные

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

Основные сведения о технологии

Рассмотрим ключевые сведения о Hyper-Threading. Что это за технология? Ее разработала компания Intel и впервые представила общественности в 2001 году. Целью ее создания было увеличение производительности серверов. Основной принцип, реализованный в Hyper-Threading — распределение процессорных вычислений на несколько потоков. Причем это возможно, даже если на соответствующего типа микросхеме установлено только одно ядро (в свою очередь, если их 2 и более, и потоки в процессоре уже распределены — технология удачно дополняет этот механизм).

Обеспечение работы главной микросхемы ПК в рамках нескольких потоков осуществляется за счет создания копий архитектурных состояний в ходе вычислений. При этом задействуется один и тот же набор ресурсов на микросхеме. Если приложение использует соответствущую возможность, то практически значимые операции осуществляются намного быстрее. Важно также, чтобы технологию, о которой идет речь, поддерживала система ввода-вывода компьютера — BIOS.

Включение Hyper-Threading

Если процессор, установленный в ПК, поддерживает соответствующий стандарт, то он, как правило, активизируется автоматически. Но в некоторых случаях приходится осуществлять вручную необходимые действия, чтобы заработала технология Hyper-Threading. Как включить ее? Очень просто.

Необходимо войти в главный интерфейс BIOS. Для этого в самом начале загрузки компьютера нужно нажать DEL, иногда — F2, F10, реже — иные клавиши, но нужная всегда появляется в одной из строчек текста, отображаемых на экране сразу после включения ПК. В интерфейсе BIOS нужно найти пункт Hyper-Threading: в поддерживающих его версиях системы ввода-вывода он обычно расположен на видном месте. Выбрав соответствующую опцию, следует нажать Enter и активировать ее, отметив как Enabled. Если данный режим уже задан, то значит Hyper-Threading Technology работает. Можно задействовать все ее преимущества. Активировав технологию в настройках, следует сохранить все записи в BIOS, выбрав пункт Save and Exit Setup. После этого компьютер перезагрузится в режиме, когда процессор работает с поддержкой Hyper-Theading. Схожим образом осуществляется отключение Hyper-Threading. Для этого нужно выбрать в соответствующем пункте другую опцию - Disabled и сохранить настройки.

Изучив, как включить Hyper-Threading и дезактивировать данную технологию, рассмотрим ее особенности подробнее.

Процессоры с поддержкой Hyper Threading

Первый процессор, на котором была реализована рассматриваемая концепция компании, согласно некоторым данным — Intel Xeon MP, также известный как Foster MP. Данная микросхема в ряде архитектурных компонентов схожа с Pentium 4, на котором также впоследствии была реализована технология, о которой идет речь. Впоследствии функция многопоточных вычислений была внедрена на серверных процессорах Xeon с ядром Prestonia.

Если говорить о текущей распространенности Hyper-Threading — какие «процы» поддерживают ее? В числе самых популярных микросхем данного типа — те, что относятся к семействам Core и Xeon. Также есть сведения о том, что схожие алгоритмы внедрены в процессорах типа Itanium и Atom.

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

История разработки

Как мы отметили выше, компания Intel показала концепцию, о которой идет речь, общественности в 2001 году. Но первые шаги в создании технологии были сделаны еще в начале 90-х. Инженерами американской компании было замечено, что ресурсы процессоров ПК при выполнении ряда операций задействуются не полностью.

Как подсчитали специалисты Intel, во время работы пользователя на ПК микросхема в рамках значительных интервалов — едва ли не основную часть времени - задействуется не слишком активно - примерно на 30%. Мнения экспертов касательно этой цифры очень разные — кто-то считает ее явно заниженной, другие — вполне соглашаются с тезисом американских разработчиков.

Однако большинство IT-специалистов сходилось во мнении, что пусть и не 70% мощностей процессора простаивает, но весьма значительный их объем.

Главная задача разработчиков

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

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

Intel удалось решить поставленную задачу. Изначально технология называлась Willamette. В 1999 году она была внедрена в архитектуру некоторых процессоров, и началось ее тестирование. Вскоре технология получила современное название — Hyper-Threading. Что это именно было - простой ребрендинг или кардинальные корректировки платформы, сказать сложно. Дальнейшие факты, касающиеся появления технологии на публике и ее реализации в различных моделях процессоров Intel, нам уже известны. В числе распространенных сегодня наименований разработки — Hyper-Threading Technology.

Аспекты совместимости с технологией

Насколько качественно реализована поддержка технологии Hyper-Threading в операционных системах? Можно отметить, что если речь идет о современных версиях Windows, то никаких проблем с тем, чтобы пользователь полноценно задействовал преимущества Intel Hyper-Threading Technology, не возникнет. Разумеется, очень важно также и то, чтобы технологию поддерживала система ввода-вывода — об этом мы сказали выше.

Программные и аппаратные факторы

Касательно старых версий ОС — Windows 98, NT и относительно устаревшей XP, необходимое условие совместимости с Hyper-Threading — поддержка ACPI. Если в ОС она не реализована, то не все потоки вычислений, которые образованы соответствующими модулями, будут распознаны компьютером. Отметим, что Windows XP в целом обеспечивает задействование преимуществ рассматриваемой технологии. Также крайне желательно, чтобы алгоритмы многопоточности были реализованы и в используемых владельцем ПК приложениях.

Иногда может потребоваться ПК — в случае установки на ней процессоров с поддержкой Hyper-Threading вместо тех, которые стояли на ней изначально и не были совместимы с технологией. Однако, как и в случае с операционными системами, особых проблем не будет, если в распоряжении пользователя — современный ПК или хотя бы соответствующий по компонентам «железа» первым процессорам Hyper Threading, как мы отметили выше, реализован в линейке Core, и адаптированные к нему чипсеты на материнских платах полностью поддерживают соответствующие функции микросхемы.

Критерии ускорения

Если компьютер на уровне аппаратных и программных компонентов не будет совместим с Hyper-Threading, то данная технология, в теории, может даже замедлить его работу. Такое положение дел заставило некоторых IT-специалистов усомниться в перспективности решения от Intel. Они решили, что не технологический скачок, а маркетинговый ход лежит в основе концепции Hyper Threading, что который в силу своей архитектуры не способен заметно ускорить работу ПК. Но сомнения критиков были достаточно быстро развеяны инженерами Intel.

Итак, базовые условия для того, чтобы технология была успешно задействована:

Поддержка Hyper-Threading системой ввода-вывода;

Совместимость материнской платы с процессором соответствующего типа;

Поддержка технологии операционной системой и конкретным приложением, работающим в ней.

Если по первым двум пунктам особых проблем не должно появиться, то в аспекте совместимости программ с Hyper-Threading все же могут возникать некоторые накладки. Но можно отметить, что если приложение поддерживает, к примеру, работу с двухъядерными процессорами, то оно будет совместимо, практически гарантированно, с технологией от Intel.

По крайней мере есть исследования, подтверждающие рост производительности программ, адаптированных к двухъядерным микросхемам, примерно на 15-18%, если в процессоре работают модули Intel Hyper Threading. Как отключить их — мы уже знаем (на случай, если у пользователя возникнут сомнения в целесообразности задействования технологии). Но ощутимых поводов для их появления, вероятно, очень немного.

Практическая полезность Hyper-Threading

Дала ли технология, о которой идет речь, ощутимые компании Intel? Есть разные мнения на этот счет. Но очень многие отмечают: настолько стала востребованной технология Hyper-Threading, что это решение стало незаменимым для многих производителей серверных систем, к тому же было положительно встречено рядовыми пользователями ПК.

Аппаратная обработка данных

Основное преимущество технологии — в том, что она реализована в аппаратном формате. То есть основная часть вычислений будет производиться внутри процессора на специальных модулях, а не в виде программных алгоритмов, передаваемых на уровень основного ядра микросхемы — что предполагало бы снижение общей производительности ПК. В целом, как отмечают IT-эксперты, инженерам Intel удалось решить задачу, которая была определена ими в начале разработки технологии — заставить процессор функционировать эффективнее. Действительно, как показали тесты, при решении многих практически значимых для пользователя задач использование Hyper-Threading позволило существенно ускорить работу.

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

Одновременное решение разных задач

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

Аналогичные разработки

Технология Hyper-Threading — не единственная, которая создана с целью повышения производительности ПК за счет многопоточных вычислений. У нее есть аналоги.

Например, в процессорах POWER5, выпущенных компанией IBM, также реализована поддержка многопоточности. То есть каждое из (всего на нем установлено 2 соответствующих элемента), может выполнять задачи в рамках 2 потоков. Тем самым микросхема обрабатывает 4 потока вычислений одновременно.

В компании AMD также есть отличные результаты работы в области концепций многопоточности. Так, известно, что в архитектуре Bulldozer задействуются алгоритмы, схожие с Hyper-Threading. Особенность решения от AMD в том, что каждый из потоков обрабатывает отдельные блоки процессора. При второго уровня остается общим. Схожие концепции реализованы и в разработанной AMD архитектуре Bobcat, которая адаптирована для ноутбуков и небольших ПК.

Разумеется, прямыми аналогами концепции от AMD, IBM и Intel считать можно очень условно. Равно как и подходы к конструированию архитектуры процессоров в целом. Но принципы, реализованные в соответствующих технологиях, можно считать вполне схожими, а цели, которые поставлены разработчиками в аспекте повышения эффективности функционирования микросхем — очень близкими по сути, если не идентичными.

Таковы ключевые факты, касающиеся интереснейшей технологии от Intel. Что она собой представляет, как включить Hyper-Threading или, наоборот, дезактивировать, мы определили. Дело, вероятно, в практическом использовании ее преимуществ, которые можно задействовать, убедившись, что ПК в аппаратных и программных компонентах поддерживает технологию.

15.03.2013

Технология Hyper-Threading появилась в процессорах Intel, страшно сказать, уже больше 10 лет назад. И в данный момент она является важным элементов процессоров Core. Однако вопрос в необходимости HT в играх все еще до конца не понятен. Мы решили провести тест, чтобы понять, нужен ли геймерам Core i7, или лучше обойтись Core i5. А также выяснить насколько Core i3 лучше Pentium.


Hyper-Threading Technology, разработанная компанией Intel, и эксклюзивно используемая в процессорах компании, начиная с достопамятного Pentium 4, в данный момент является чем-то само собой разумеющимся. Ею оснащено значительное число процессоров текущего и предыдущих поколений. Будет она использоваться и в ближайшем будущем.

И необходимо признать, что технология Hyper-Threading полезна, и позитивно влияет на производительность, иначе Intel не стала бы использовать ее для позиционирования своих процессоров внутри линейки. Причем не как второстепенный элемент, а один из важнейших, если не самый важный. Чтобы было понятно, о чем мы говорим, мы подготовили табличку, которая позволяет легко оценить принцип сегментирования процессоров Intel.


Как видите отличий между Pentium и Core i3, а также между Core i5 и Core i7 совсем мало. Фактически модели i3 и i7, отличаются от Pentium и i5 только размером кэша третьего уровня приходящимся на одного ядро (не считая тактовой частоты, конечно). У первой пары это 1,5 мегабайта, а у второй – 2 мегабайта. Это отличие не может коренным образом повлиять на производительность процессоров, так как разница в объеме кэша сильно мала. Именно поэтому Core i3 и Core i7 получили поддержку технологии Hyper-Threading, которая и является главным элементом, позволяющим этим процессорам иметь преимущество в производительности над Pentium и Core i5, соответсвенно.

В итоге чуть больший кэш и поддержка Hyper-Threading позволят выставлять значительно более высокие цены на процессоры. Для примера процессоры линейки Pentium (около 10 тыс. тенге) примерно в два раза дешевле, чем Core i3 (около 20 тыс. тенге), и это притом, что физически, на аппаратном уровне они абсолютно одинаковы, и, соответсвенно, имеют одинаковую себестоимость. Разница в цене между Core i5 (около 30 тыс. тенге) и Core i7 (около 50 тыс. тенге) также очень велика, хоть и меньше двух крат в младших моделях.


Насколько обоснована такая прибавка в цене? Какой реальный прирост дает Hyper-Threading? Ответ давно известен: прирост бывает разный – все зависит от приложения и его оптимизации. Мы решили проверить, что дает HT в играх, как одним из самых требовательных “бытовых” приложений. К тому же данный тест будет отличным дополнением к нашему предыдущему материалу посвященному влиянию количества ядер в процессоре на игровую производительность .

Перед тем как переходить к тестам, давайте вспомним (ну или узнаем), что такое Hyper-Threading Technology. Как высказывалась сама Intel, представляя данную технологию много лет назад, ничего особенно сложного в ней нет. Фактически, все что нужно для внесения HT на физическом уровне – это добавление к одному физическому ядру не одного набора регистров и контроллера прерываний, а двух. В процессорах Pentium 4 эти дополнительные элементы увеличивали количество транзисторов всего на пять процентов. В современных ядрах Ivy Bridge (равно как и в Sandy Bridge, и будущем Haswell) дополнительные элементы даже для четырех ядер не увеличивают кристалл даже на 1 процент.


Дополнительные регистры и контроллер прерываний, вкупе с программной поддержкой позволяют операционной системе видеть не одно физическое ядро, а два логических. При этом обработка данных двух потоков, которые отправляются системой все также идет на одном ядре, но с некоторыми особенностями. В распоряжении одного потока все также остается весь процессор, но как только какие-то блоки CPU освобождаются и простаивают, то они тут, же отдаются в распоряжение второго потока. Благодаря этому удалось задействовать все блоки процессора одновременно, и тем самым увеличить его эффективность. Как заявляла сама Intel, прирост производительности в идеальных условиях может доходить до 30 процентов. Правда, данные показатели верны только для Pentium 4 с его очень длинным конвейером, у современных процессоров выгода от HT меньше.

Но идеальные условия для Hyper-Threading бывают далеко не всегда. И что самое важное – худший результат работы HT – это не отсутствие прироста производительности, а ее снижение. То есть при определенных условиях, производительность процессора с HT будет падать относительно процессора без HT из-за того, что накладные расходы на разделение потоков и организацию очереди будут значительно превышать прирост от обсчета параллельных потоков, который возможен в данном конкретном случае. И такие случаи встречаются гораздо чаще, чем хотелось бы Intel. Причем многие годы использования Hyper-Threading не улучшили ситуацию. Особенно это касается игр, весьма сложных и отнюдь нешаблонных с точки зрения обсчета данных, приложений.

Для того чтобы выяснить влияние Hyper-Threading на игровую производительность, мы вновь использовали наш многострадальный тестовый процессор Core i7-2700K, и симулировали с помощью отключения ядер и включения/выключения HT, сразу четыре процессора. Условно их можно назвать Pentium (2 ядра, HT выключен), Core i3 (2 ядра, HT включен), Core i5 (4 ядра, HT выключен), и Core i7 (4 ядра, HT включен). Почему условно? Прежде всего, потому, что по некоторым характеристикам они не соответствуют реальным продуктам. В частности отключение ядер не ведет к соответствующему урезанию объема кэша третьего уровня – его объем для всех равен 8 мегабайтам. А, кроме того, все наши “условные” процессоры работают на одинаковой частоте 3,5 гигагерца, которая пока достигнута не всеми процессорами линейки Intel.


Впрочем, это даже к лучшему, так как благодаря неизменности всех важных параметров мы сможем выяснить реальное влияние Hyper-Threading на игровую производительность без каких-либо оговорок. Да и процентная разница в производительности между нашими “условными” Pentium и Core i3 будет близка к разнице между реальными процессорами при условии равных частот. Также не должно смущать то, что мы используем процессор с архитектурой Sandy Bridge, так как наши тесты эффективности, о которых вы можете прочитать в статье “Голая производительность - Исследуем эффективность ALU и FPU ”, показали, что влияние Hyper-Threading в последних поколениях процессоров Core остается неизменным. Скорее всего, актуальным данный материал окажется и для грядущих процессоров Haswell.

Ну что же, вроде все вопросы относительно методики тестирования, а также особенностей функционирования Hyper-Threading Technology обсуждены, а потому пора переходить к самому интересному – тестам.

Еще в тесте, в котором мы изучали влияние количества процессорных ядер на игровую производительность, мы выяснили, что 3DMark 11 совершенно спокойно относится к производительности CPU, отлично работая даже на одном ядре. Такое же “мощное” влияние оказал и Hyper-Threading. Как видите, тест абсолютно не замечает различий между Pentium и Core i7, не говоря уже о промежуточных моделях.

Metro 2033

А вот Metro 2033 явно заметила появление Hyper-Threading. И отреагировала на него негативно! Да, именно так: включение HT в данной игре оказывает негативное влияние на производительность. Небольшое влияние, конечно – 0,5 кадра в секунду при четырех физических ядрах, и 0,7 при двух. Но этот факт дает все основания заявить, что в Metro 2033 Pentium быстрее, чем Core i3, а Core i5 лучше, чем Core i7. Вот оно подтверждение того факта, что Hyper-Threading показывает свою эффективность не всегда и не везде.

Crysis 2

Эта игра показала очень интересные результаты. Прежде всего, отметим, что влияние Hyper-Threading хорошо заметно в двуядерных процессорах – Core i3 опередил Pentium почти на 9 процентов, что для этой игры совсем немало. Победа HT и Intel? Не совсем, так как Core i7 не показал никакого прироста относительно заметно более дешевого Core i5. Но этому есть разумное объяснение – Crysis 2 не умеет использовать больше четырех потоков данных. Из-за этого мы видим хороший прирост у двуядерника с HT – все же лучше четыре потока, хоть и логических, чем два. С другой стороны, дополнительные потоки Core i7 девать уже было некуда, там вполне хватало четырех физических ядер. Так что по результатам данного теста можно отметить положительное влияние HT в Core i3, который здесь заметно лучше Pentium. А вот среди четырехядерников Core i5 вновь выглядит более разумным решением.

Battlefield 3

Здесь результаты очень странные. Если в тесте на количество ядер, battlefield был образцом микроскопического, но линейного прироста, то включение Hyper-Threading внесло в результаты хаос. По факту можно констатировать, что Core i3, со своими двумя ядрами и HT оказался лучшим из всех, опередив даже Core i5 и Core i7. Странно, конечно, но, в то же время, Core i5 и Core i7 вновь оказались на одном уровне. Чем это объясняется не ясно. Скорее всего тут сыграла свою роль методика тестирования в этой игре, которая дает большие погрешности, нежели стандартные бенчмарки.

В прошлом тесте F1 2011 проявила себя как одна из игр, очень критично относящихся к количеству ядер, а в этом вновь удивила отменным влиянием на производительность технологии Hyper-Threading. Причем вновь, как и в Crysis 2, очень хорошо включение HT показало себя на двуядерных процессорах. Посмотрите на разницу между нашими условными Core i3 и Pentium – она более чем двукратная! Явно видно, что игре очень сильно не хватает двух ядер, и при этом ее код так хорошо распараллеливается, что эффект получился потрясающим. С другой стороны, против четырех физических ядер не попрешь – Core i5 заметно быстрее Core i3. А вот Core i7, вновь, как и в предыдущих играх не показал ничего выдающегося на фоне Core i5. Причина все та же – игра не умеет использовать больше 4 потоков, а накладные расходы на работу HT снижают производительность Core i7 ниже уровня Core i5.

Старому вояке Hyper-Threading не нужнее, чем ежу футболка – его влияние отнюдь не так ярко заметно как в F1 2011 или Crysis 2. При этом все же отметим, что 1 лишний кадр включение HT на двуядерном процессоре принесло. Этого конечно маловато, чтобы сказать, что Core i3 лучше, чем Pentium. По крайней мере, это улучшение явно не соответствует разнице в цене этих процессоров. А уж о разнице в цене между Core i5 и Core i7 даже вспоминать не стоит, так как процессор без поддержки HT вновь оказался быстрее. Причем заметно быстрее – на 7 процентов. Как ни крути, а вновь констатируем факт, что четыре потока это максимум для этой игры, а потому HyperThreading в данном случае не помогает Core i7, а мешает.