Pentium 4 3,06 GHz c Hyper-Threading

14 ноября 2002 г. компания Intel выпустила очередной процессор для десктоп-систем -- Pentium 4 с тактовой частотой 3,06 GHz и поддержкой фирменной технологии Hyper-Threading. Событие это знаменательно вдвойне. Во-первых, частота 3,06 GHz является юбилейной, и новый рубеж можно считать взятым. Во-вторых, технология Hyper-Threading, с помощью которой один физический процессор представляется операционной системе и приложениям как два логических CPU, в определенном смысле уникальна, принося в массовые настольные системы понятие двухпроцессорности (пусть и с неизменной приставкой "псевдо"). Но если с первым пунктом все более или менее ясно -- высокая тактовая частота и, следовательно, возросшая производительность, -- то со вторым поначалу возникает немало вопросов. Лучше ли "два" процессора, чем просто один?.. если да, то насколько?.. и когда от этого есть реальная польза?..


Впервые HT был реализован в процессорах для рабочих станций и серверов Intel Xeon.

Многопроцессорность: HT

Использование ресурсов процессора в обычной системе (а), двухпроцессорной (б) и системе с Hyper-Threading (в)

Существует несколько вариантов построения многопроцессорных систем. Однако в мире x86 наиболее прижилось так называемое симметричное мультипроцессирование (SMP, Symmetric MultiProcessing) -- схема, в которой все процессоры равноправны и используют общую оперативную память. Распределение работы между ними выполняется на программном уровне (операционной системой или приложением). Простейшей и самой "привычной" реализацией SMP является двухпроцессорная система (системы с числом процессоров 4, 8 и намного дороже, и менее распространены). Именно на двухпроцессорные, или дуальные системы (от англ. dual -- сдвоенный, парный) мы будем ориентироваться в рассмотрении, тем более что технология Hyper-Threading реализует как раз два логических процессора на системе с Pentium 4.

Итак, что же необходимо, чтобы на двухпроцессорной системе программы выполнялись быстрее, чем на однопроцессорной (что и является конечной целью)? В общем случае для этого требуется "четырехсторонняя поддержка" -- со стороны BIOS, чипсета, операционной системы и самого приложения. BIOS должен правильно опознать оба процессора, инициализировать их и заполнить соответствующие структуры данных информацией о них. На чипсет возлагается правильное распределение прерываний между процессорами. Операционная система обязана поддерживать многозадачность и многопроцессорность и уметь распределять задачи между разными процессорами (например, при работе в DOS, не подозревавшей о существовании SMP, напрасно ожидать ускорения выполнения какого бы то ни было приложения). Ну и наконец, весьма желательно, чтобы само приложение также умело распараллеливать свою работу, используя несколько процессоров. Например, классическим случаем являются программы рендеринга трехмерных сцен (такие как 3D Studio MAX, LightWave, Cinema 4D и др.), которые способны разбивать сцену на части для независимого обсчета этих частей на разных процессорах. Как показывают тесты, производительность на двухпроцессорной системе в таком случае может увеличиваться почти вдвое.

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

Уместно вспомнить, что абсолютное большинство современных "настольных" приложений не рассчитаны на работу в SMP-режиме. Однако у серьезного пользователя Windows, не особо стесненного малым объемом памяти ПК, одновременно бывают запущены (начинайте загибать пальцы): офисный пакет, несколько окон броузера, почтовый клиент, Instant Messenger, MP3-плеер, антивирус... Если добавить к этому саму ОС, у которой также немало забот по обслуживанию очереди печати, сети, функций безопасности, кэша и пр., то получим вполне многозадачную среду, и дополнительный процессор ей совсем не помешал бы... Ведь именно "торможения", когда один процесс временно забирает все ресурсы CPU и не дает выполняться другим приложениям, сильнее всего раздражают пользователя. Если эти задержки удается уменьшить с помощью организации хоть сколько-нибудь параллельной работы программ -- значит, пользователи будут довольны и станут эту технологию покупать.

Hyper-Threading: когда один -- почти как два

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

Что же делать простым пользователям, которым (хотя и далеко не всем) требуется все более высокая производительность? Чтобы удовлетворить такие запросы, Intel решила перенести в настольные системы свою технологию Hyper-Threading, за счет более эффективного использования ресурсов CPU реализующей два логических процессора на одном физическом. Как уже упоминалось, HT увидела свет в процессорах Xeon. Но, как это часто бывает, появившаяся в мире "серьезных" систем технология через какое-то время перекочевала в десктопы (вспомним RAID-массивы, двухканальную память, управление очередью команд в жестких дисках...).

Как же работает Hyper-Threading? Известно, что в каждый момент времени только часть ресурсов процессора задействуется для выполнения программного кода. Например, когда выполняются операции с плавающей запятой, блок ALU простаивает (и, в принципе, вполне мог бы считать что-то целочисленное). Один из вариантов заключается в том, чтобы позволить параллельно выполняться еще одному процессу, используя вычислительные блоки все того же CPU. В общем случае им может быть как другое приложение, так и просто иной поток (thread) этого же приложения.

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


Перечислим главные особенности HT, которые могут оказаться существенными для пользователей десктоп-систем:

Хотя, как будет показано далее, HT дает вполне ощутимый прирост производительности в многозадачных системах, существуют приложения, чье быстродействие при включении Hyper-Threading может падать. Например, "неправильными" в этом смысле оказываются программы, использующие циклы ожидания, при которых процесс занимает все ресурсы физического CPU. Для предотвращения этого Intel рекомендует вместо пустых циклов ожидания применять инструкцию PAUSE (появилась в IA-32 начиная с Pentium 4). Но наибольший прирост быстродействия на системах с HT показывают приложения, оптимизированные с учетом этой технологии (т. е. правильно использующие многопоточную архитектуру). Оптимизация может проводиться как вручную (для этого доступен довольно богатый набор вспомогательного ПО -- например Intel Threading Tools), так и в автоматическом режиме: зачастую достаточно просто перекомпилировать приложение с использованием одного из оптимизирующих компиляторов Intel.


Новый Pentium 4 и его платформа

Pentium 4 3,06 GHz использует то же ядро Northwood, что и предыдущие модели (естественно, с небольшими изменениями, касающимися поддержки Hyper-Threading). Соответственно, и основные характеристики также унаследованы: частота системной шины 533 MHz (133 MHz Quad-Pumped Bus), объем L2-кэша 512 KB, технология изготовления 0,13 мкм.

Примечательно, что в этот раз выход, в общем-то, нового процессора не сопровождается выпуском каких-либо обновленных чипсетов. Целых шесть существующих наборов логики Intel работают с Hyper-Threading -- это все чипсеты, поддерживающие частоту FSB 533 MHz:

Исключение составляет лишь 845G A-stepping, в котором поддержка HT отсутствует. Да, все эти чипсеты Intel выпустила заранее, и производители материнских плат уже успели подготовить немало соответствующих моделей. В результате к выходу Pentium 4 с Hyper-Threading все эти платы оказались тем самым "роялем в кустах", для "игры на котором" (т. е. для корректной работы с HT) как максимум требуется обновление BIOS. Такую подготовку плацдарма можно только приветствовать: появление Hyper-Threading в настольных системах имеет шанс пройти достаточно гладко и без очередных революций, от которых компьютерный мир уже изрядно подустал. Заметим, что в чипсетах VIA и SiS под Pentium 4 поддержка Hyper-Threading пока не реализована.

Но, хотя вместе с выходом Pentium 4 с HT новые чипсеты и не объявлялись, 18 ноября (т. е. через четыре дня после выхода процессора) Intel все же представила еще один чипсет для Pentium 4 с поддержкой Hyper-Threading. Это E7205 (кодовое название Granite Bay), ориентированный на рабочие станции, и проще всего его охарактеризовать так: сильно урезанный однопроцессорный вариант E7500 (Plumas) с поддержкой FSB 533 MHz и AGP 8X для систем с Pentium 4 (каждое слово должно читаться с соответствующим ударением). Детально на особенностях Granite Bay мы остановимся в другой раз, когда для этого будет реальный повод (как минимум одна система на E7205). Пока же ограничимся констатацией того, что в середине ноября 2002 года семейство Pentium 4 получило не только новый мощный процессор с частотой 3,06 GHz и поддержкой Hyper-Threading, но и новую платформу более высокого класса.


По материалам журнала "Компьютерное обозрение", номер 45 за 2002 год.