
- •9.5. Суперскалярная обработка команд
- •9.5.1. Внеочередное завершение команд
- •9.5.2. Завершение выполнения
- •9.5.3. Операция диспетчеризации
- •9.6 Семейство процессоров Intel ia-32
- •9.6.1. Сегментация памяти для семейства процессоров ia-32
- •9.6.2. 16-Разрядный режим
- •9.6.3. Процессоры 80386 и 80486
- •9.6.4. Процессор Pentium
- •9.6.5. Процессор Pentium Pro
- •9.6.6. Процессоры Pentium II и Pentium III
- •9.6.7. Процессор Pentium 4
- •9.6.8. Технология Hyper-Threading от Intel Производительности всегда мало
- •Hyper-Threading
- •Углубляемся в технологию
- •Максимум эффективности от Hyper-Threading
- •9.6.9. Архитектура ia-64
- •Описание ia-64
- •Архитектура е2к
9.6.2. 16-Разрядный режим
Процессоры IA-32 могут функционировать в режиме, допускающем непосредственное выполнение программ на машинных языках ранних 16-разрядных процессоров Intel (8086 и 80286). В этом режиме применяются только младшие половины регистров процессора, обозначенные на рис. 3.38 как АХ, СХ,.... Размер внутренних адресов достигает 16 разрядов, а для адресации используется только подмножество режимов, перечисленных в табл. 3.3. Так, значение индексного регистра при формировании исполнительного адреса масштабировать невозможно.
Переключение между 32-разрядным и 16-разрядным режимами может выполняться на уровне отдельных команд. Кроме того, возможен независимый выбор разрядности адреса и данных. Поэтому при работе с 16-разрядными данными могут использоваться все способы адресации архитектуры IA-32. Перед началом выполнения программы устанавливается режим, используемый по умолчанию. Для переключения в другой режим к команде добавляется префиксный байт, не показанный на рис. 3.41.
9.6.3. Процессоры 80386 и 80486
В процессоре 80386, как уже было сказано, впервые реализована архитектура IA-32, описанная в главе 3. Он поддерживает технологии сегментации памяти и разбиения ее на страницы, с которыми мы познакомились в разделе 11.3.1.
Процессор 80486 относится к категории первых микросхем, содержащих порядка 1 млн. транзисторов — приблизительно столько же, сколько их насчитывается в процессоре Motorola 68040. Благодаря расширенным схемам по производительности он значительно превосходил процессор 80386. Арифметическое устройство с плавающей запятой соответствовало стандарту IEEE (см. главу 6). В компьютерах на базе процессоров 80386 за выполнение вычислений с плавающей запятой отвечала отдельная микросхема сопроцессора. Поддержка страниц и управление памятью в процессоре 80486 осуществлялись так же, как и в процессоре 80386.
Процессор 80486 содержал 4-канальный множественно-ассоциативный кэш для команд и данных. Загрузка в него новой информации ускорялась благодаря механизму пакетной пересылки данных, позволявшему считывать и загружать в кэш четыре 32-разрядных слова одним блоком. В нем применялся протокол со сквозной записью, согласно которому записываемые в кэш данные сразу автоматически сохранялись и в основной памяти.
С целью повышения производительности в архитектуру процессора 80486 был включен ряд устройств параллельной и конвейерной обработки команд. Устройства обработки целых чисел и чисел с плавающей запятой могли выполнять команды параллельно. Во время обработки одной команды из памяти уже извлекалась следующая команда. Для выполнения наиболее «популярных» команд требовалось меньше тактов, чем в процессоре 80386. Так, команды загрузки и сохранения данных, а также команды, производящие операции над данными регистров без обращения к памяти, выполнялись за один такт.
9.6.4. Процессор Pentium
У процессора Pentium, выпущенного в 1993 году, производительность значительно выше, чем у процессора 80486. Он содержит 3 млн. транзисторов и при выполнении программ, осуществляющих целочисленные вычисления, имеет вдвое высшую вычислительную мощность, чем процессор 80486. В процессе выполнения программ, предназначенных для интенсивных вычислений с плавающей запятой, данный показатель возрастает в пять раз. На рис 9.6.3. приведена структура процессора Pentium.
Рис 9.6.3. Блочная структура процессора Pentium
Pentium имеет CISC-архитектуру, но при этом для повышения производительности в нем использованы многие структурные элементы RISC-процессоров. (Они применялись и в процессоре 80486, но в меньшем количестве.) В частности, для команд и данных предусмотрены раздельные кэши объемом по 8 Кбайт, интегрированные в микросхему. У процессора Pentium суперскалярная организация.
Одной из главных особенностей микропроцессоров архитектуры IA-32 является динамическое (спекулятивное) исполнение. Под этим термином подразумевается следующая совокупность возможностей:
Глубокое предсказание ветвлений (с вероятностью >90% можно предсказать 1015 ближайших переходов).
Анализ потока данных (на 20-30 шагов вперед просмотреть программу и определить зависимость команд по данным или ресурсам).
Опережающее исполнение команд (МП P6 может выполнять команды в порядке, отличном от их следования в программе).
Внутренняя организация МП Pentium соответствует архитектуре RISC, поэтому блок выборки команд, считав поток инструкций IA-32 из L1 кэша инструкций, декодирует их в серию микроопераций. Поток микроопераций попадает в буфер переупорядочивания (пул инструкций). В нем содержатся как не выполненные пока микрооперации, так и уже выполненные, но еще не повлиявшие на состояние процессора. Для декодирования инструкций предназначены три параллельных дешифратора: два для простых и один для сложных инструкций. Каждая инструкция IA-32 декодируется в 1-4 микрооперации. Микрооперации выполняются пятью параллельными исполнительными устройствами: два для целочисленной арифметики, два для вещественной арифметики и блок интерфейса с памятью. Таким образом, возможно выполнение до пяти микроопераций за такт.
Блок исполнительных устройств способен выбирать инструкции из пула в любом порядке. При этом благодаря блоку предсказания ветвлений возможно выполнение инструкций, следующих за условными переходами. Блок резервирования постоянно отслеживает в пуле инструкций те микрооперации, которые готовы к исполнению (исходные данные не зависят от результата других невыполненных инструкций) и направляет их на свободное исполнительное устройство соответствующего типа. Одно из целочисленных исполнительных устройств дополнительно занимается проверкой правильности предсказания переходов. При обнаружении неправильно предсказанного перехода все микрооперации, следующие за переходом, удаляются из пула и производится заполнение конвейера команд инструкциями по новому адресу.
Взаимная зависимость команд от значения регистров архитектуры IA-32 может требовать ожидания освобождения регистров. Для решения этой проблемы предназначены 40 внутренних регистров общего назначения, используемых в реальных вычислениях.
Блок удаления отслеживает результат спекулятивно выполненных микроопераций. Если микрооперация более не зависит от других микроопераций, ее результат переносится на состояние процессора, и она удаляется из буфера переупорядочивания. Блок удаления подтверждает выполнение инструкций (до трех микроопераций за такт) в порядке их следования в программе, принимая во внимание прерывания, исключения, точки останова и промахи предсказания переходов.
Благодаря 64-разрядной внешней шине данных ускоряется загрузка в кэши данных из внешней памяти. Кэши имеют 2-канальную множественно-ассоциативную структуру и состоят из 32-байтовых блоков. В состав процессора входят три независимых конвейерных операционных блока: два для целочисленных операций и один для операций с плавающей запятой. Целочисленные конвейеры имеют пять ступеней, а устройство с плавающей запятой — восемь ступеней.
В процессоре Pentium используется простая форма динамического предсказания переходов. Каждый раз выбирается то направление, по которому осуществлялся предыдущий переход. Такое предсказание верно для всех переходов, выполняемых в конце программного цикла после первого перехода и до выхода из цикла.