Новый процессор Intel Pentium 4 c тактовой частотой 3,06 ГГц и поддержкой технологии Hyper-Threading

Сергей Пахомов

14 ноября корпорация Intel анонсировала новый процессор Intel Pentium 4 c тактовой частотой 3,06 ГГц c поддержкой технологии Hyper-Threading. Новый процессор — это не просто очередная версия процессора с большей тактовой частотой, а дальнейшее развитие микроархитектуры, позволяющее повысить производительность процессора без увеличения его тактовой частоты.

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

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

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

Другой способ повышения производительности заключается в увеличении исполнительных блоков (Execution Units) внутри самого процессора. В этом случае возможно параллельное выполнение нескольких процессорных инструкций одновременно. Такая многозадачность реализована в том или ином виде во всех современных процессорах. Отход от последовательного выполнения команд, использование нескольких исполняющих блоков в одном процессоре позволяют одновременно обрабатывать несколько процессорных микрокоманд, то есть организовывать параллелизм на уровне инструкций (Instruction Level Parallelism, ILP), что, естественно, увеличивает общую производительность.

Поясним все вышесказанное на примере. Представьте себе гипотетический процессор, в котором имеется всего три исполнительных блока: блок для работы с целыми числами (арифметико-логическое устройство, ALU), блок для работы с числами с плавающей точкой (FPU) и блок для записи и чтения данных из памяти (Store/Load, S/L). Пусть, кроме того, каждая операция осуществляется за один такт процессора.

Предположим, что выполняется программа, состоящая из трех инструкций: первые две — арифметические действия с целыми числами, а последняя — сохранение результата. В этом случае вся программа будет выполнена за три такта процессора. В первом такте задействуется блок ALU процессора (красный квадрат на рис. 1), во втором — также блок ALU, а в третьем — блок записи и чтения данных из памяти S/L. В этом случае мы имеем дело с классическим последовательным вариантом выполнения программы.

Повышение производительности процессора заключается в конечном счете в том, чтобы сократить время выполнения всей программы. Если не менять тактовую частоту, то это время можно сократить за счет уменьшения количества тактов для выполнения программы. Это можно сделать, если добавить количество исполняемых блоков. Если, к примеру, в нашем гипотетическом процессоре использовался бы не один, а два блока ALU, то две первые операции с целыми числами можно было бы выполнить одновременно, то есть за один такт. Для этого, конечно, необходимо, чтобы сами операции были независимыми, то есть результат одной из них не зависел от результата другой. Только в этом случае возможно параллельное выполнение команд. С учетом сделанных предположений добавление второго блока ALU в нашем гипотетическом процессоре позволяет сократить время выполнения всей программы на один цикл (рис. 2).

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

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

В современных приложениях в любой момент времени, как правило, выполняется не одна, а несколько задач или несколько потоков (threads) одной задачи, называемых также нитями. Давайте посмотрим, как будет вести себя наш гипотетический процессор при выполнении двух разных потоков задач (рис. 3). Красные квадраты соответствуют использованию исполнительных блоков процессора одного потока, а синие квадраты — другого. Как и в предыдущем случае, допустим, что первый поток включает две независимые инструкции с использованием блока ALU и одну инструкцию по сохранению результата. Задача второго потока — загрузить необходимые данные из памяти (работа с блоком S/L), произвести операцию с действительными числами (числами с плавающей запятой) при помощи блока FPU и сохранить результат с использованием блока S/L. Если бы оба потока исполнялись изолированно, то для выполнения первого потребовалось бы два такта процессора, а для второго  — три. При одновременном исполнении обоих потоков процессор будет постоянно переключаться между обоими потоками так, что за один такт процессора выполняются только инструкции какого-либо одного из потоков. Для исполнения обоих потоков всего потребуется пять процессорных тактов.

Теперь давайте подумаем над тем, как можно повысить скорость выполнения задачи в рассмотренном примере.

Самый простой способ заключается в том, чтобы использовать два процессора вместо одного. Такой подход типичен для серверных SMP-конфигураций. В этом случае рост производительности достигается за счет параллельного (Thread Level Parallelism, TLP) решения нескольких разных задач или нескольких потоков одной задачи на нескольких процессорах. Тогда в рассмотренном выше примере для выполнения всей задачи потребовалось бы не пять, а всего три процессорных такта (по времени выполнения второго потока).

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

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

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

Итак, технология Hyper Threading — это реализация одновременной многопоточности (Simultaneous Multi-Threading, SMT). Технология Hyper-Threading является промежуточной между многопоточной обработкой, осуществляемом в мультипроцессорных системах, и параллелизмом на уровне инструкций, реализованном в однопроцессорных системах.

Еще одной иллюстрацией реализации технологии Hyper-Threading может служить следующий пример. Рассмотрим два потока инструкций, каждый из которых с учетом параллелизма на уровне инструкций (ILP) на каждом такте процессора по-разному загружает процессорные блоки. Загрузку процессора первым потоком будем отмечать синим цветом, а вторым — зеленым. При одновременном выполнении обоих потоков без технологии Hyper-Threading средняя загрузка процессора на каждом такте остается незначительной (рис. 5). Если же задействовать технологию Hyper-Threading и совместить выполнение команд от обоих потоков на каждом такте процессора, то в идеальном случае можно получить повышение производительности в два раза.

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

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

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

На первом такте процессора каждый из потоков задействует различные блоки процессора, поэтому выполнение инструкций легко совместить. Аналогичная ситуация возникает и на втором такте. А вот на третьем такте инструкции обоих потоков пытаются задействовать один и тот же исполнительный блок процессора (а именно блок S/L). В результате возникает конфликтная ситуация и один из потоков (в нашем случае второй) должен ждать освобождения требуемого ресурса процессора. Аналогичная ситуация возникает и на пятом такте, но в этом случае для наглядности простаивает первый поток. В результате оба потока выполняются не за пять тактов (идеальная ситуация), а за шесть.

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

  • оба потока утилизировали разные блоки процессора;
  • отдельные потоки были плохо оптимизированы под процессор Intel Pentium 4;
  • выполняемые потоки принадлежали бы различным приложениям.

С первым условием все понятно, а вот второе и третье нуждаются в пояснении. Дело в том, что если исполняемое приложение плохо оптимизировано под процессор Intel Pentium 4, то доля утилизации ресурсов процессора за счет параллелизма на уровне инструкций (ILP) также невелика. В результате на каждом такте процессора часть ресурсов не задействуется и может быть использована вторым потоком.

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

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

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

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

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

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

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

Вместе с новым процессором были объявлены и новые чипсеты: Intel 845PE, Intel 845GE и Intel 845GV. Кроме того, новый процессор будет поддерживаться чипсетом Intel 850E. Все чипсеты рассчитаны на 533-мегагерцевую шину. Чипсеты Intel 845PE, Intel 845GE и Intel 845GV, кроме того, поддерживают память SDRAM DDR333 (PC2700), а чипсет Intel 850E — память RDRAM PC1066.

КомпьютерПресс 12'2002

Наш канал на Youtube

1999 1 2 3 4 5 6 7 8 9 10 11 12
2000 1 2 3 4 5 6 7 8 9 10 11 12
2001 1 2 3 4 5 6 7 8 9 10 11 12
2002 1 2 3 4 5 6 7 8 9 10 11 12
2003 1 2 3 4 5 6 7 8 9 10 11 12
2004 1 2 3 4 5 6 7 8 9 10 11 12
2005 1 2 3 4 5 6 7 8 9 10 11 12
2006 1 2 3 4 5 6 7 8 9 10 11 12
2007 1 2 3 4 5 6 7 8 9 10 11 12
2008 1 2 3 4 5 6 7 8 9 10 11 12
2009 1 2 3 4 5 6 7 8 9 10 11 12
2010 1 2 3 4 5 6 7 8 9 10 11 12
2011 1 2 3 4 5 6 7 8 9 10 11 12
2012 1 2 3 4 5 6 7 8 9 10 11 12
2013 1 2 3 4 5 6 7 8 9 10 11 12
Популярные статьи
КомпьютерПресс использует