Pentium 4 3.06 и технология HyperThreading

Pentium 4 3.06 и технология HyperThreading

Одной из полезных особенностей архитектуры процессора Pentium 4 является возможность достижения очень высоких тактовых частот. Почему это стало возможным? Не будем вдаваться в детали: поскольку исполнительный конвейер у этого процессора длиннее, чем у предшественников и конкурирующих процессоров, общее время выполнения одной команды поделено на несколько коротких этапов, каждый из которых может выполняться достаточно быстро. Сокращение длины одного такта — это не что иное, как увеличение тактовой частоты. Поэтому, отлаживая технологию производства, корпорация Intel может постепенно наращивать частоту процессора. Что она и делает, с завидной периодичностью объявляя все новые и новые модели Pentium 4.

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

Идея
Для чего применяется многопроцессорная обработка — понятно: если в системе имеются два и более вычислительных устройства, их можно загрузить работой и тем самым увеличить быстродействие системы. Вопрос только в том, как разбить задачу на несколько независимых подзадач, которые можно выполнять параллельно. Но современные операционные системы уже являются многозадачными и многопоточными — они одновременно выполняют множество служебных и прикладных задач. Очевидно, что выигрыш от наличия нескольких процессоров, хотя бы теоретический, должен получить любой компьютер, работающий под управлением многозадачной ОС.
Однако добавление второго процессора многократно увеличивает сложность, а, следовательно, и стоимость системы. Для сервера, постоянно загруженного работой, это оправданно. Но не для персоналки.
Однако было найдено простое и эффективное решение. В его основе лежит использование особенностей современных процессоров. Они, как известно, являются конвейерными и суперскалярными, то есть выполнение команд в них идет параллельно, по этапам и на нескольких конвейерах сразу. Для того чтобы разбить команды на параллельные потоки, процессору необходимо проанализировать зависимость их друг от друга и расположить их в таком порядке, чтобы логика программы не искажалась. Понятно, что, если программа не скомпилирована с расчетом на параллельное выполнение команд или ее оптимизация не подходит под архитектуру процессора, большинство дублирующихся вычислительных блоков процессора будет простаивать. Если бы в процессор поступали потоки независимых команд, он мог бы обрабатывать их параллельно или иногда заполнять свободные блоки подходящими командами из другого, независимого потока.
Каким образом организовать поступление в процессор нескольких потоков команд, позволяющих оптимальнее использовать его ресурсы? А если возложить эту задачу на программное обеспечение, например, на операционную систему? Скажем, заставить ее думать, что в системе имеется не один, а два процессора. Тогда команды станут поступать в двух независимых друг от друга потоках, гарантированно подходящих для параллельной обработки. Процессор сможет выделять потокам ресурсы по мере их освобождения, выполняя работу за двоих. Прирост скорости будет обусловлен тем, что процессор будет работать эффективнее.

Преимущества и недостатки
Процессор, поддерживающий HyperThreading, эмулирует в системе работу двух одинаковых логических процессоров, принимая команды, идущие для каждого из них. На самом деле внутри процессора нет двух вычислительных ядер, как, например, в серверном процессоре IBM POWER4. Удвоены только массивы регистров — как общего назначения, так и служебных. Получается, что оба логических процессора конкурируют за ресурсы одного вычислительного ядра и потому используют его более эффективно, нежели одно ядро, как в процессорах, не поддерживающих HyperThreading.
Процессор рассматривает оба потока команд и по очереди запускает на выполнение команды то из одного, то из другого или сразу из двух, если есть свободные вычислительные ресурсы. Нельзя сказать, что один из потоков является приоритетным — процессор старается обработать оба. Если один из потоков команд останавливается в ожидании события или зацикливается, то процессор просто переключается на второй поток команд. С этим связан эффект ускорения низкоуровневых операций (доступ к подсистемам ввода-вывода), когда работающий драйвер не вызывает блокировки системы.
Однако один процессор не может работать с такой же скоростью, как два процессора. Он может лишь более эффективно использовать свои внутренние ресурсы. Это особенно хорошо заметно, если потоки команд, грубо говоря, не похожи друг на друга, то есть содержат разные типы команд. Тогда обработка одного потока может совмещаться с замедленной обработкой другого, то есть процессор за одно и то же время будет успевать делать полтора дела. Несколько одновременно запущенных приложений, использующих разные алгоритмы обработки данных, будут получать серьезный выигрыш от HyperThreading. И в то же время не стоит забывать, что эффективность новой технологии зависит от работы операционной системы. Разделять команды на потоки будет именно она. И если операционка будет нагружать один из процессоров своими внутренними, системными задачами, то даже одно приложение сможет ускорить работу благодаря HyperThreading.
От приложения также зависит, сможет ли оно использовать новые возможности новой технологии. Оно должно выполняться в нескольких потоках, причем эти потоки должны быть спроектированы так, чтобы не пересекаться и не зависеть друг от друга. Ведь если, например, один поток ждет результата работы второго, то HyperThreading может давать отрицательный эффект из-за того, что один поток может забрать почти все ресурсы и не давать работать второму. В общем, прирост скорости сильно зависит от выполняемых задач. В некоторых случаях он может достигать 25-35% (по данным Intel). Или, например, "заточенные" под многозадачность программы ускоряются на 15-20%. А в других случаях разница не будет заметна или вообще будет отрицательной.

Поддержка
На самом деле технология HyperThreading не так уж и нова. Ее поддержка была заложена в самые первые процессоры семейства Pentium 4 (те самые, с ядром Willamette), но до последнего времени не работала. В смежном рынке серверов и рабочих станций, на процессорах Xeon она была включена раньше, более года назад. Однако на настольном рынке ее появление было задержано. И только после объявления Pentium 4 3.06 было решено, что в обновленной линейке процессоров, как младших, так и старших, еще не вышедших, HyperThreading будет поддерживаться в обязательном порядке.
(HyperThreading не была включена раньше потому, что до последнего времени на настольном рынке доминировала ОС Windows 9x/ME, которая принципиально неспособна поддерживать многопроцессорный режим работы. Только с распространением Windows XP появилась возможность задействовать HyperThrea-ding в обычных условиях).
Кроме процессора, необходимо позаботиться о поддержке новой технологии со стороны других компонентов системы. Так, нужен подходящий чипсет материнской платы. Согласно данным, полученным от представителей Intel, технология HyperThreading поддерживается следующими чипсетами:
— i850E (Rambus-чипсет);
— i845E, i845PE;
— i845G*, i845GE, i845GV;
— i865G/P/PE;
— i875P;
— все будущие чипсеты Intel для настольных ПК и рабочих станций, а также серверные чипсеты ServerWorks.
(Чипсет i845G помечен потому, что изначально он не имел поддержки HyperThreading. Новый степпинг чипсета исправляет эту проблему. Тем не менее, не стоит рассчитывать на то, что ваша уже купленная плата на i845G будет на новом степпинге — это очень популярный и массовый чипсет, и старые чипы еще долго будут использоваться в производстве).
О чипсетах других производителей есть следующие сведения:
— SIS 645DX, 648, 651 и 655 изначально не поддерживают новую технологию, но в новых ревизиях чипов этот недостаток будет исправлен. Правда, SIS может и не получить лицензию на использование HyperThreading, и тогда фирме придется как-то выкручиваться.
— VIA выпустит новую линейку чипсетов PTxxx, начав с PT400. Эти чипсеты будут поддерживать HyperThreading, ничем не отличаясь от предшественников серии P4X. Лицензию получать не нужно — ее не было с самого начала.
— Безусловно, ALi тоже поддержит HyperThreading, но это никого не интересует из-за крайне низкой популярности продукции этой фирмы.
Кроме чипсета, о HyperThrea-ding должна знать и BIOS платы. Это нужно для того, чтобы была подготовлена таблица конфигурации и произведена инициализация "второго процессора". У производителей плат первого звена уже вышли необходимые обновления BIOS.
Для работы новой технологии нужна также одна из двух операционных систем — либо Windows XP (Home или Pro — не важно), либо Linux с новым ядром, поддерживающим HyperThreading.

Тестирование
И вот, достав все необходимые компоненты — процессор (Pentium 4 3.06), плату (Intel D845PEBT2, i845PE), BIOS (P06) и операционную систему (Windows XP Professional), я решил проверить, какой реальный прирост обеспечивает новая технология. Использовать для этого какие-то специфические приложения я не стал, поскольку меня интересовала работа системы в обычных условиях дома или офиса. То, что профессиональные приложения можно "заточить" под HyperThreading, не вызывает сомнений, однако с ними работает далеко не каждый пользователь. А вот в игры, например, играют многие.
После включения HyperThrea-ding в BIOS пришлось переустановить операционку, чтобы заменить ядро (HAL) на поддерживающее многопроцессорность, поскольку обычное ACPI-ядро Windows XP успешно определяют два процессора, но использует только один из них. В принципе, можно обойтись и без переустановки — замена ядра подробно описана в различных FAQ по Windows 2000/XP.
Далее я прогнал обычный набор своих тестов. И ни один из них не сообщил о заметном увеличении производительности, кроме, разве что, SYSmark2002 Content Creation — около 1% прироста, что, в принципе, можно списать на погрешность измерений. Очевидно, что методика измерения скорости выполнения тестов не рассчитана на многозадачность — в частности, тесты полагается запускать после полной перезагрузки, сняв все лишние задачи и службы и т.п. Кроме того, выполнение одного приложения, "захватывающего" все ресурсы системы, может замедляться из-за того, что операционка "думает", что у нее есть второй свободный процессор, хотя на самом деле процессор только один, и он уже занят по полной программе. Этим я и объясняю снизившиеся из-за HyperThreading результаты некоторых тестов (Quake3, Serious Sam, Winstone2001).
Попробуем другой метод. Сымитируем типичную ситуацию, когда нам хочется больше скорости. Самыми неприятными из-за своей длительности задачами, которые мне известны, являются архивация данных и сжатие аудио/видео. Во время их выполнения, пока бежит полоска прогресса, хочется заниматься чем-либо другим, но при этом скорость работы сильно падает... Тут бы и помогла технология HyperThreading.

Я взял:
1) архиватор WinRAR 3.10;
2) к нему часть дистрибутива теста SYSmark2002, в которой есть разные по формату файлы — и текст, и графика, и видео;
3) программу для работы с видео VirtualDub 1.4.13 и кодек DivX Pro 5.0.2;
4) программу-кодер Windows Media Encoder 7.01;
5) к ним видеоклип длиной порядка 7 минут;
6) тест SPECviewperf DRV08, имитирующий работу пользователя с приложением Intergraph DesignReview;
7) проигрыватель Windows Media Player, встроенный в Windows XP;
8) к нему звуковой файл в формате WMA.
И все это скомбинировал следующим образом. Сначала измерил скорость работы первых четырех приложений независимо друг от друга. Потом запустил Media Player (который ругают за "тормознутость"), в нем — звуковой файл и тяжелый для процессора спектральный анализатор Rotating Particles. И следом по очереди запустил каждое из приложений.




Hyperthreading выключен

Hyperthreading включен

Разница

PCMark2002 JPEG decompression

23.3

22.9

-2%

PCMark2002 Zlib compression

9.5

9.5

0%

PCMark2002 Zlib decompression

114.7

116.9

2%

PCMark2002 Text search

401

401.55

0%

PCMark2002 Audio compression

130.3

129.9

0%

PCMark2002 Vector calculations

76

76.2

0%

PCMark2002 ACF compression LQ

162.4

140.8

-13%

PCMark2002 ACF compression HQ

34.4

25.6

-26%

SYSMark2002 Office

185

183

-1%

SYSMark2002 Content Creation

405

411

1%

Winstone2001 Business

68.6

65.3

-5%

Winstone2001 Content Creation

89.6

83.6

-7%

SPECviewperf DRV08

38

38

0%

SPECviewperf DX07

29.8

29.8

0%

SPECviewperf Light05

10.3

10.25

0%

SPECviewperf ProEng01

10

10.1

1%

3DMark2001 640x480

15811

15842

0%

Quake3 640x480

294.8

288

-2%

Serious Sam SE 640x480

113.3

112.1

-1%

Comanche4 640x480

56.4

56.2

0%

Wolfenstein 640x480

166.3

166.9

0%

Max Payne 640x480

87

87.4

0%


И вот какие результаты получились. Работа одиночных приложений от включения HyperThreading, как и в случае с тестами, не изменилась — разве что VirtualDub сжал видео на 8% быстрее. Добавление Media Player при отсутствии HyperThreading привело к снижению скорости на 20-25% (в случае SPECviewperf — на 10%). А при включенной HyperThreading потери стали меньше на 5% (в случае SPECviewperf — на 3,5%). Это не такой уж замечательный результат, но он есть.
А потом, для эксперимента, я попробовал запаковать архив на фоне сжатия видео, чтобы проверить, как HyperThreading справится с двумя приложениями, каждое из которых загружает процессор практически на 100%. Как ни странно, HyperThreading значительно ускоряла WinRAR, замедляя при этом второе приложение. Причем результат зависел от того, окно какого приложения являлось активным. Наиболее приемлемый вариант — когда активно окно Media Encoder. В этом случае WinRAR отработал за 116 секунд против 157 при отключенной HyperThreading — на 25% быстрее, или всего на треть медленнее, чем в одиночном режиме. А Media Encoder со своей задачей справился тоже на треть медленнее, чем в одиночку, но в отсутствие HyperThreading в паре с WinRAR он работал на 10% быстрее. Можно придумать множество объяснений такой избирательности новой технологии — обвинить в этом операционку, авторов приложений, процессор, собственные руки и т.д.

Итог
Ясно только, что HyperThreading — неоднозначное и очень оригинальное техническое решение, которое позволяет с минимальными затратами реализовать, хоть и не совсем настоящую, но все же многопроцессорность на однопроцессорной машине. Осталось только решить вопрос, как добиться выигрыша от ее применения.

Материнская плата Intel D845PEBT2 и процессор Pentium 4 3.06 были предоставлены компанией "СитиПринт"
Макс Курмаз, max@hw.by



Компьютерная газета. Статья была опубликована в номере 06 за 2003 год в рубрике hard :: mb

©1997-2024 Компьютерная газета