Что такое hyper threading в процессорах intel. Еще раз о Hyper-Threading. Дополнительные доводы в пользу Hyper-Threading-а для игр

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

Даешь производительность

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

Постоянный рост быстродействия, безусловно, нужен. По крайней мере, это прибыльный бизнес, и всегда найдется красивый способ подвигнуть пользователей на очередной апгрейд вчерашнего "суперпроизводительного CPU" на завтрашний "еще более супер…". Например, синхронное распознавание речи и синхронный же перевод на другой язык - это ли не мечта всех и каждого? Или необычайно реалистичные игры почти "киношного" качества (целиком поглощающие внимание и порой приводящие к серьезным изменениям в психике) - это ли не стремление множества геймеров от мала до велика?

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

Итак, какими же способами добиться увеличения их быстродействия?

Повышение тактовой частоты . Можно и дальше "утоньшать" технологический процесс и наращивать частоту. Но, как известно, это непросто и чревато всевозможными побочными эффектами вроде проблем с тепловыделением.

Наращивание ресурсов процессора - например, наращивание объема кэша, добавление новых блоков (Execution Units). Все это влечет за собой рост числа транзисторов, усложнение процессора, увеличение площади кристалла, а следовательно, стоимости.

Кроме того, предыдущие два способа дают, как правило, отнюдь не линейное повышение производительности. Это хорошо известно на примере Pentium 4: ошибки в предсказании ветвлений и прерывания вызывают сброс длинного конвейера, что сильно сказывается на общем быстродействии.

Многопроцессорность . Установка нескольких CPU и распределение работы между ними часто оказываются достаточно эффективными. Но такой подход не очень дешев - каждый дополнительный процессор увеличивает стоимость системы, да и дуальная материнская плата намного дороже обычной (не говоря уже о платах с поддержкой четырех и более CPU). Кроме того, далеко не все приложения получают от многопроцессорности выигрыш в производительности, достаточный для оправдания затрат.

Кроме "чистой" многопроцессорности, существует несколько "промежуточных" вариантов, позволяющих ускорить выполнение приложений:

Chip Multiprocessing (CMP) - два процессорных ядра физически располагаются на одном кристалле, используя общий или раздельный кэш. Естественно, размер кристалла получается достаточно большим, и на стоимости это не может не сказаться. Заметим, что несколько таких "сдвоенных" CPU также могут работать в многопроцессорной системе.

Time-Slice Multithreading . Процессор переключается между программными потоками через фиксированные промежутки времени. Накладные расходы порой получаются довольно внушительными, особенно если какой-либо процесс находится в ожидании.

Switch-on-Event Multithreading . Переключение задач при возникновении длительных пауз, например "непопаданий в кэш" (cache misses), большое число которых характерно для серверных приложений. В этом случае процесс, ожидающий загрузки данных из сравнительно медленной памяти в кэш, приостанавливается, высвобождая ресурсы CPU для других процессов. Однако Switch-on-Event Multithreading, как и Time-Slice Multithreading, не всегда позволяет достичь оптимального использования ресурсов процессора, - в частности из-за ошибок в предсказании ветвлений, зависимости инструкций и т. д.

Simultaneous Multithreading . В этом случае программные потоки выполняются на одном процессоре "одновременно", т. е. без переключения между ними. Ресурсы CPU распределяются динамически, по принципу "не используешь - отдай другому". Именно такой подход положен в основу технологии Intel Hyper-Threading, к рассмотрению которой мы и переходим.

Как работает Hyper-Threading

Как известно, нынешняя "парадигма компьютинга" предполагает многопоточные вычисления. Это касается не только серверов, где такое понятие существует изначально, но и рабочих станций и настольных систем. Потоки (threads) могут относиться как к одному, так и к разным приложениям, но почти всегда активных потоков больше, чем один (чтобы убедиться в этом, достаточно в Windows 2000/XP открыть Task Manager и включить отображение числа потоков). Вместе с тем обычный процессор может в один момент времени выполнять только один из потоков и вынужден постоянно переключаться между ними.

Впервые технология Hyper-Threading была реализована в процессоре Intel Xeon MP (Foster MP), на котором и шла ее "обкатка". Напомним, что Xeon MP, официально представленный на IDF Spring 2002, использует родственное Pentium 4 Willamette ядро, содержит 256 KB L2-кэша и 512 KB/1 MB L3-кэша и поддерживает работу в 4-процессорных конфигурациях. Также поддержка Hyper-Threading наличествует в процессоре для рабочих станций - Intel Xeon (ядро Prestonia, 512 KB L2-кэша), вышедшем на рынок несколько раньше, чем Xeon MP. С двухпроцессорными конфигурациями на Intel Xeon наши читатели уже знакомы , поэтому мы рассмотрим возможности Hyper-Threading именно на примере этих CPU - как теоретически, так и практически. Как бы там ни было, а "простой" Xeon - вещь более приземленная и удобоваримая, чем Xeon MP в 4-процессорных системах…

Принцип действия Hyper-Threading основывается на том, что в каждый момент времени только часть ресурсов процессора используется при выполнении программного кода. Неиспользуемые ресурсы также можно загрузить работой - например, задействовать для параллельного выполнения еще одного приложения (либо другого потока этого же приложения). В одном физическом процессоре Intel Xeon формируются два логических процессора (LP - Logical Processor), которые разделяют между собой вычислительные ресурсы CPU. Операционная система и приложения "видят" именно два CPU и могут распределять работу между ними, как и в случае полноценной двухпроцессорной системы.

Одна из целей реализации Hyper-Threading - при наличии только одного активного потока позволить ему выполняться с тем же быстродействием, как и на обычном CPU. Для этого у процессора предусмотрены два основных режима работы: Single-Task (ST) и Multi-Task (MT). В режиме ST активным является только один логический процессор, который безраздельно пользуется доступными ресурсами (режимы ST0 и ST1); другой LP остановлен командой HALT. При появлении второго программного потока бездействовавший логический процессор активируется (посредством прерывания), и физический CPU переводится в режим MT. Останов неиспользуемых LP командой HALT возложен на операционную систему, которая в итоге и отвечает за такое же быстрое выполнение одного потока, как и в случае без Hyper-Threading.

Для каждого из двух LP хранится так называемый Architecture State (AS), что включает в себя состояние регистров различного типа - общего назначения, управляющих, APIC и служебных. У каждого LP есть свои APIC (контроллер прерываний) и набор регистров, для корректной работы с которыми вводится понятие Register Alias Table (RAT), отслеживающей соответствие между восемью регистрами общего назначения IA-32 и 128 регистрами физического CPU (по одной RAT на каждый LP).

При работе двух потоков поддерживаются два соответствующих набора Next Instruction Pointers. Большая часть инструкций берется из Trace Cache (TC), где они хранятся в декодированном виде, и доступ к TC два активных LP получают поочередно, через такт. В то же время, когда активен только один LP, он получает монопольный доступ к TC без чередования по тактам. Аналогичным же образом происходит и доступ к Microcode ROM. Блоки ITLB (Instruction Translation Look-aside Buffer), задействующиеся при отсутствии необходимых инструкций в кэше команд, дублируются и доставляют команды каждый для своего потока. Блок декодирования инструкций IA-32 Instruction Decode является разделяемым и в случае, когда требуется декодирование инструкций для обоих потоков, обслуживает их поочередно (опять-таки через такт). Блоки Uop Queue и Allocator разделяются надвое, отводя по половине элементов для каждого LP. Schedulers числом 5 штук обрабатывают очереди декодированных команд (Uops) несмотря на принадлежность к LP0/LP1 и направляют команды на выполнение нужным Execution Units - в зависимости от готовности к выполнению первых и доступности вторых. Кэши всех уровней (L1/L2 для Xeon, а также L3 для Xeon MP) являются полностью разделяемыми между двумя LP, однако для обеспечения целостности данных записи в DTLB (Data Translation Look-aside Buffer) снабжаются дескрипторами в виде ID логических процессоров.

Таким образом, инструкции обоих логических CPU могут выполняться одновременно на ресурсах одного физического процессора, которые подразделяются на четыре класса:

  • дублируемые (Duplicated);
  • полностью разделяемые (Fully Shared);
  • с дескрипторами элементов (Entry Tagged);
  • динамически разделяемые (Partitioned) в зависимости от режима работы ST0/ST1 или MT.

При этом большинство приложений, получающих ускорение в многопроцессорных системах, могут также ускоряться и на CPU со включенным Hyper-Threading без каких-либо модификаций. Но существуют и проблемы: например, если один процесс находится в цикле ожидания, он может занять все ресурсы физического CPU, препятствуя работе второго LP. Таким образом, производительность при использовании Hyper-Threading может иногда и падать (до 20%). Для предотвращения этого Intel рекомендует вместо пустых циклов ожидания использовать инструкцию PAUSE (появилась в IA-32 начиная с Pentium 4). Также ведется достаточно серьезная работа по автоматической и полуавтоматической оптимизации кода при компиляции - например, в этом отношении ощутимо продвинулись компиляторы серии Intel OpenMP C++/Fortran Compilers ().

Еще одной целью первой реализации Hyper-Threading, по словам Intel, было сведение к минимуму роста числа транзисторов, площади кристалла и энергопотребления при заметном приросте быстродействия. Первая часть этого обязательства уже выполнена: добавление в Xeon/Xeon MP поддержки Hyper-Threading увеличило площадь кристалла и энергопотребление менее чем на 5%. Что же получилось со второй частью (производительностью), нам еще предстоит проверить.

Практическая часть

По вполне понятным причинам мы не проводили тестов 4-процессорных серверных систем на Xeon MP со включенным Hyper-Threading. Во-первых, это достаточно трудоемко. А во-вторых, решись мы на такой подвиг - все равно сейчас, менее чем через месяц после официального объявления, абсолютно нереально заполучить это дорогостоящее оборудование. Поэтому решено было ограничиться той же системой с двумя Intel Xeon 2.2 GHz, на которой проводилось первое тестирование этих процессоров (см. ссылку в начале статьи). Система основывалась на материнской плате Supermicro P4DC6+ (чипсет Intel i860), содержала 512 MB RDRAM-памяти, видеокарту на чипе GeForce3 (64 MB DDR, драйверы Detonator 21.85), жесткий диск Western Digital WD300BB и 6X DVD-ROM; в качестве ОС использовалась Windows 2000 Professional SP2.

Для начала несколько общих впечатлений. При установке одного Xeon с ядром Prestonia на старте системы BIOS выводит сообщение о наличии двух CPU; если же установлены два процессора, пользователь видит сообщение о четырех CPU. Операционная система нормально распознает "оба процессора", но только если выполнены два условия.

Во-первых, в CMOS Setup у последних версий BIOS плат Supermicro P4DCxx появился пункт Enable Hyper-Threading, без разрешения которого ОС распознает только физический процессор(-ы). Во-вторых, для сообщения ОС о наличии дополнительных логических процессоров используются возможности ACPI. Поэтому для задействования Hyper-Threading в CMOS Setup должна быть включена опция ACPI, и для самой ОС также должен быть установлен HAL (Hardware Abstraction Layer) с поддержкой ACPI. Благо, в Windows 2000 смена HAL со Standard PC (или MPS Uni-/Multiprocessor PC) на ACPI Uni-/Multiprocessor PC производится легко - заменой "драйвера компьютера" в менеджере устройств. В то же время для Windows XP единственным законным способом перехода на ACPI HAL является переустановка системы поверх существующей инсталляции.

Но вот все приготовления сделаны, и наша Windows 2000 Pro уже свято верит в то, что работает на двухпроцессорной системе (хотя на самом деле процессор установлен только один). Теперь по традиции пора определиться с целями тестирования. Итак, мы хотим:

  • Оценить влияние Hyper-Threading на производительность приложений различного класса.
  • Сравнить этот эффект с эффектом от установки второго процессора.
  • Проверить, насколько "честно" ресурсы отдаются активному логическому процессору, когда второй LP бездействует.

Для оценки производительности мы взяли уже знакомый читателям набор приложений, использовавшийся в тестированиях workstation-систем. Начнем, пожалуй, с конца и проверим "равноправность" логических CPU. Все предельно просто: сначала мы проводим тесты на одном процессоре с отключенным Hyper-Threading, а затем повторяем процесс, включив Hyper-Threading и используя только один из двух логических CPU (с помощью Task Manager). Поскольку в данном случае нас интересуют лишь относительные значения, результаты всех тестов приведены к виду "больше - лучше" и нормализованы (за единицу взяты показатели однопроцессорной системы без Hyper-Threading).

Что ж, как можно видеть, обещания Intel здесь выполнены: при наличии только одного активного потока производительность каждого из двух LP в точности равна быстродействию физического CPU без Hyper-Threading. Бездействующий LP (причем как LP0, так и LP1) действительно приостанавливается, а разделяемые ресурсы, насколько об этом можно судить по полученным результатам, полностью передаются в пользование активному LP.

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

Рендеринг . Результаты четырех тестов в пакетах 3D-моделирования 3D Studio MAX 4.26, Lightwave 7b и A|W Maya 4.0.1 объединены в одну диаграмму ввиду их похожести.

Во всех четырех случаях (для Lightwave - две различные сцены) загрузка CPU при наличии одного процессора с выключенным Hyper-Threading практически постоянно держится на уровне 100%. Тем не менее при включении Hyper-Threading расчет сцен ускоряется (в результате чего у нас даже родилась шутка о загрузке CPU более 100%). В трех тестах виден прирост производительности от Hyper-Threading 14--18% - с одной стороны, негусто по сравнению со вторым CPU, но с другой - весьма неплохо, учитывая "бесплатность" этого эффекта. В одном из двух тестов с Lightwave прирост быстродействия практически нулевой (видимо, сказывается специфика этого полного странностей приложения). Но отрицательного результата нет нигде, а заметный прирост в трех других случаях обнадеживает. И это при том, что параллельные процессы рендеринга делают сходную работу и наверняка не лучшим образом могут одновременно задействовать ресурсы физического CPU.

Photoshop и MP3-кодирование . Кодек GOGO-no-coda 2.39c один из немногих поддерживает SMP, и на нем заметен 34%-ный прирост быстродействия от двухпроцессорности. Вместе с тем эффект от Hyper-Threading в данном случае нулевой (разницу в 3% мы существенной не считаем). А вот в тесте с Photoshop 6.0.1 (скрипт, состоящий из большого набора команд и фильтров) видно замедление при включении Hyper-Threading, хотя второй физический CPU добавляет в этом случае 12% производительности. Вот, собственно, первый случай, когда Hyper-Threading вызывает падение быстродействия…

Профессиональный OpenGL . То, что SPEC ViewPerf и многие другие OpenGL-приложения часто замедляются в SMP-системах, известно давно.

OpenGL и двухпроцессорность: почему они не дружат

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

Естественно, замечали эту странность не только мы. Некоторые тестеры просто молча обходили этот факт - например, приводя результаты сравнения по тестам SPEC ViewPerf только для двухпроцессорных конфигураций, избегая таким образом объяснений "почему двухпроцессорная система медленнее?". Другие же строили все возможные фантастические предположения о когерентности кэшей, необходимости ее поддерживать, возникающих из-за этого накладных расходах и т.п. И почему-то никого не удивляло, что, например, следить за когерентностью процессорам почему-то приспичило именно при оконном OpenGL-рендеринге (по своей "вычислительной" сути мало чем отличающемся от любой другой расчетной задачи).

На самом же деле объяснение, на наш взгляд, намного более простое. Как известно, приложение может выполняться на двух процессорах быстрее, чем на одном, если:

  • есть более два или больше одновременно выполняющихся программных потока (threads);
  • эти потоки не мешают выполнению один другого - например, не конкурируют за общий ресурс вроде внешнего накопителя или сетевого интерфейса.

Теперь же упрощенно рассмотрим как выглядит OpenGL-рендеринг, выполняемый двумя потоками. Если приложение, "видя" два процессора, создает два потока OpenGL-рендеринга, то для каждого из них, согласно правилам OpenGL, создается свой gl-контекст. Соответственно каждый поток выполняет рендеринг в свой gl-контекст. Но проблема в том, что для окна, в которое происходит вывод изображения, только один gl-контекст может быть текущим в каждый момент. Соответственно потоки в этом случае просто "по очереди" выводят сгенерированное изображение в окно, делая попеременно свой контекст текущим. Нужно ли говорить, что такое "чередование контекстов" может очень дорого обходиться в смысле накладных расходов?

Также для примера приведем графики использования двух CPU в нескольких приложениях, отображающих OpenGL-сцены. Все измерения проведены на платформе следующей конфигурации:

  • один или два Intel Xeon 2.2 GHz (Hyper-Threading отключен);
  • 512 MB RDRAM-памяти;
  • материнская плата Supermicro P4DC6+;
  • видеокарта ASUS V8200 Deluxe (NVidia GeForce3, 64 MB DDR SDRAM, драйверы Detonator 21.85);
  • Windows 2000 Professional SP2;
  • видеорежим 1280x1024x32 bpp, 85 Hz, Vsync отключен.

Синим и красным изображены графики загруженности CPU 0 и CPU 1 соответственно. Линия посередине - итоговый график CPU Usage. Три графика соответствуют двум сценам из 3D Studio MAX 4.26 и части теста SPEC ViewPerf (AWadvs-04).


CPU Usage: анимация 3D Studio MAX 4.26 - Anibal (with manipulators).max


CPU Usage: анимация 3D Studio MAX 4.26 - Rabbit.max


CPU Usage: SPEC ViewPerf 6.1.2 - AWadvs-04

Такая же картина повторяется еще в массе других приложений, задействующих OpenGL. Два процессора совершенно не утруждаются работой, и общий CPU Usage оказывается на уровне 50-60%. В то же время для однопроцессорной системы во всех этих случаях CPU Usage уверенно держится на уровне 100%.

Поэтому неудивительно то, что очень многие OpenGL-приложения не слишком ускоряются в дуальных системах. Ну а то, что они порой даже замедляются, имеет, на наш взгляд, вполне логичное объяснение.

Мы можем констатировать, что при двух логических CPU падение быстродействия еще более значительно, что вполне объяснимо: два логических процессора мешают друг другу точно так же, как и два физических. Но их общая производительность, естественно, оказывается при этом ниже, поэтому при включении Hyper-Threading она снижается еще больше, чем просто при работе двух физических CPU. Результат предсказуемый и вывод простой: Hyper-Threading, как и "настоящий" SMP, для OpenGL бывает противопоказан.

CAD-приложения . Предыдущий вывод подтверждается и результатами двух CAD-тестов - SPECapc for SolidEdge V10 и SPECapc for SolidWorks. Показатели графических составляющих этих тестов для Hyper-Threading похожи (хотя в случае SMP-системы для SolidEdge V10 результат немного выше). А вот результаты нагружающих процессор тестов CPU_Score заставляют задуматься: 5--10%-ный прирост от SMP и 14--19%-ное замедление от Hyper-Threading.

Но в конце концов, Intel честно признает в некоторых случаях возможность падения производительности при Hyper-Threading - например, при использовании пустых циклов ожидания. Мы можем лишь предположить, что это и является причиной (детальное исследование кода SolidEdge и SolidWorks выходит за рамки статьи). Ведь всем известен консерватизм разработчиков CAD-приложений, предпочитающих проверенную надежность и не особо спешащих переписывать код с учетом новых веяний в программировании.

Подведение итогов, или "Внимание, правильный вопрос"

Hyper-Threading работает, в этом никаких сомнений не остается. Безусловно, технология не универсальна: есть приложения, которым "плохеет" от Hyper-Threading, и в случае распространения этой технологии их желательно будет модифицировать. Но разве не то же самое произошло в свое время с MMX и SSE и продолжает происходить с SSE2?..

Однако здесь встает вопрос о применимости этой технологии к нашим реалиям. Вариант однопроцессорной системы на Xeon с Hyper-Threading мы отбросим сразу (или допустим только как временный, в ожидании покупки второго процессора): даже 30%-ный прирост производительности никак не оправдывает цену - тогда уж лучше приобрести обычный Pentium 4. Остается число CPU от двух и выше.

А теперь давайте вообразим, что мы покупаем двухпроцессорную систему на Xeon (скажем, с Windows 2000/XP Professional). Два CPU установлены, Hyper-Threading включен, BIOS находит целых четыре логических процессора, сейчас ух как взлетим… Стоп. А вот сколько процессоров увидит наша операционная система? Правильно, два. Всего два, поскольку на большее число она просто не рассчитана. Это будут два физических процессора, т. е. работать все будет точно так же, как и при отключенном Hyper-Threading, - не медленнее (два "дополнительных" логических CPU просто остановятся), но и не быстрее (проверено дополнительными тестами, результаты не приводим по причине их полной очевидности). М-да, приятного мало…

Что же остается? Ну не ставить же Advanced Server или.NET Server на нашу workstation в самом деле? Нет, система-то установится, опознает все четыре логических процессора и будет функционировать. Вот только серверная ОС смотрится на рабочей станции, мягко говоря, немного странно (не говоря уже о финансовых аспектах). Единственный разумный случай - это когда наша двухпроцессорная Xeon-система и будет выполнять роль сервера (по крайней мере, некоторые сборщики ничтоже сумняшеся уже наладили выпуск серверов на workstation-процессорах Xeon). Но вот для дуальных workstation с соответствующими ОС применимость Hyper-Threading остается под вопросом. Intel сейчас активно выступает за лицензирование ОС по числу не логических, а физических CPU. Дискуссии пока еще идут, и, в общем-то, многое зависит от того, увидим ли мы ОС для рабочих станций с поддержкой четырех процессоров.

Ну а с серверами все выходит достаточно просто. Например, Windows 2000 Advanced Server, установленный на двухпроцессорную Xeon-систему со включенным Hyper-Threading, "увидит" четыре логических процессора и будет преспокойно на ней работать. Для оценки того, что дает Hyper-Threading в серверных системах, мы приводим результаты Intel Microprocessor Software Labs для двухпроцессорных систем на Xeon MP и нескольких серверных приложений Microsoft.

Прибавка производительности 20--30% для двухпроцессорного сервера "задаром" - вещь более чем заманчивая (особенно по сравнению с покупкой "настоящей" 4-процессорной системы).

Вот и выходит, что на текущий момент практическая применимость Hyper-Threading возможна только в серверах. Вопрос же с рабочими станциями зависит от решения с лицензированием ОС. Хотя и еще одно применение Hyper-Threading вполне реально - если и настольные процессоры получат поддержку этой технологии. К примеру (пофантазируем), чем плоха система с Pentium 4 с поддержкой Hyper-Threading, на которую установлена Windows 2000/XP Professional с поддержкой SMP?.. Впрочем, ничего невероятного в этом нет: полные энтузиазма разработчики Intel обещают повсеместное внедрение Hyper-Threading - от серверов до настольных и мобильных систем.

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

Intel Hyper Threading: что это такое?
Если не лезть глубоко в дебри компьютерной терминологии, а выражаться простым языком, то данная технология была разработана для того, чтобы увеличить поток команд, обрабатываемых одновременно центральным процессором. Современные процессорные чипы, как правило, используют имеющиеся вычислительные возможности всего на 70%. Остальное остается, так сказать, про запас. Что же касается обработки потока данных, то в большинстве случаев используется всего один поток, несмотря на то, что в системе применяется многоядерный процессор.

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

Историческая справка
Окунемся немного в историю данной разработки. Поддержка Hyper Threading впервые появилась только в процессорах Intel Pentium 4. Позже реализация данной технологии была продолжена в серии Intel Core iX (X здесь обозначает серии процессоров). Стоит отметить, что в линейке процессорных чипов Core 2 она по какой-то причине отсутствует. Правда, тогда прирост производительности был довольно слабым: где-то на уровне 15-20%. Это говорило о том, что процессор не обладал необходимой вычислительной мощностью, а созданная технология практически обогнала свое время. Сегодня поддержка технологии Hyper Threading имеется уже практически во всех современных чипах. Для увеличения мощности центрального процессора сам процесс использует всего 5% поверхности кристалла, оставляя при этом место для обработки команд и данных.

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

Как включить Hyper Threading в BIOS?
Мы уже немного разобрались с тем, что собой представляет технология Hyper Threading, и познакомились с историей ее развития. Мы вплотную подобрались к пониманию того, что собой представляет технология Hyper Threading. Как активировать данную технологию для использования в работе процессора? Здесь все делается достаточно просто. Необходимо использовать подсистему управления BIOS. Вход в подсистему осуществляется при использовании клавиш Del, F1, F2, F3, F8, F12, F2+Del и т.д. Если вы используете ноутбук Sony Vaio, то для них предусмотрен специфичный вход при использовании специализированной клавиши ASSIST. В настройках BIOS, если используемый вами процессор поддерживает технологию Hyper Threading, должна иметься специальная строка настройка. В большинстве случаев она выглядит как Hyper Threading Technology, а иногда – как Function. В зависимости от разработчика подсистемы и версии BIOS, настройка данного параметра может содержаться либо в главном меню, либо в расширенных настройках. Чтобы задействовать данную технологию, необходимо войти в меню параметров и установить значение на Enabled. После этого необходимо сохранить выполненные изменения и осуществить перезагрузку системы.

Чем полезна технология Hyper Threading?
В заключение хотелось бы говорить о преимуществах, которые дает использование технологии Hyper Threading. Для чего все это нужно? Зачем необходимо увеличить мощность процессора при обработке информации? Тем пользователям, которые работают с ресурсоемкими приложениями и программами, ничего объяснять не нужно. Многие наверняка знают, что графические, математические, проектировочные пакеты программ в процессе работы требуют очень много системных ресурсов. Из-за этого вся система нагружается настолько, что начинает жутко тормозить. Чтобы этого не происходило, рекомендуется активировать поддержку Hyper Threading.

Сегодня я решил осветить тему целесообразности покупки процессоров с Hyper-Threading (Гипер Трейдингом) для игр.

Первое, что следует отметить — однозначного ответа на поставленный вопрос быть не может. Для кого-то Hyper-Threading необходимость, а для кого-то будет ненужной тратой денег. Я разберу оба варианта и после прочтения статьи (я надеюсь) каждый самостоятельно сможет оценить, какой из этих случаев его и соответственно сделает ВЗВЕШЕННЫЕ выводы о целесообразности покупки процессора с Hyper-Threading-ом именно для себя.

Hyper-Threading подразумевает разделение обработки данных ядром процессора на 2 параллельных потока. Суть хорошо передана следующей цитатой:

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

Приложения, в которых Hyper-Threading НЕ нужен.

Hyper-Threading НЕ нужен, для :

  • 90% компьютерных игр, как современных, так и тех, которые выйдут в течении ближайших лет;
  • офисных приложений.

Обоснование ненужности Hyper-Threading-a.

Hyper-Threading имеет серьезный разброс прироста производительности от 0% (т.е. полной бесполезности) до 30% (что весьма ощутим) который зависит от следующих факторов:

1. Оптимизация отдельно взятого приложения под работу с 8 и более потоками.

Если приложение не оптимизировано под 8 потоков, то в нем Hyper-Threading не даст никаких преимуществ.

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

2. Процент загрузки процессора

Чем выше процент загрузки процессора, тем ощутимее влияние Hyper-Threading-а. И наоборот — при низкой загрузке вы не заметите его влияния.

Исходя из этих данных можно сделать вывод, что Hyper-Threading НЕ нужен для :

  • 90% компьютерных игр, современных и тех, которые выйдут в течении ближайших лет. Они не обеспечивают достаточной нагрузки на процессор;
  • офисных приложений.

Где Hyper-Threading НУЖЕН?

  • Бесспорна польза Hyper-Threading-а в 3Д Максе и в других проф. приложениях. В моих экспериментах эта технология уменьшала время рендеринга на 30%;
  • Hyper-Threading так же полезен и для 10% ТОПОВЫХ современных компьютерных игр (таких как Crysis 3), а так же подобных игр, которые выйдут в будущем.

Дополнительные доводы в пользу Hyper-Threading-а для игр

Несмотря на то, что сегодня на PC существует действительно мало игр, оптимизированных на 8 потоков я все же считаю, что в покупке i7 с 8 потоками есть смысл, особенно с прицелом на будущее.

Во-первых игровые компьютеры в моем понимании должны ориентироваться не на большинство игр, а на лучшие игры. А по факту уже сегодня есть игры оптимизированные на 8 потоков и обеспечивающие 70+% загрузки ЦП.

Во-вторых можно ожидать только улучшения игр и как следствие увеличение их требовательности к ЦП. Особенно принимая во внимание тот факт, что на консолях УЖЕ 8 ядер и это следует воспринимать как «планку» игровых систем на ближайшие годы.

Отмечу, что в данном случае речь идет не о домыслах отдельного блогера, а о прогнозах двух команд лучших профессионалов, которые работают над такими платформами, как PS и XBox.

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

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

В сети встречается информация о бесполезности Гиперт-Трейдинга в принципе.

От себя я решил провести мини-тест, рендер небольшой сцены с включенным и выключенным Гипер-Трейдингом.

Итак сначала Гипер трейдинг выключен. Время рендеринга 188 сек.

Включаем. Время рендеринга уменьшается до 151 сек.

В прошлом мы рассказывали о технологии одновременной многопоточности (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 ещё некоторое время не появится на рынке обычных ПК, но при хорошей поддержке разработчиков, она может стать очередной технологией, которая опустится с серверного уровня до простых компьютеров.

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, а мешает.