Микроархитектура процессоров Pentium 4
Будучи выпущенным в 1995 году, процессор Intel Pentium Pro стал первым CPU с архитектурой P6. С тех пор прошло уже достаточно много времени, сменилось несколько поколений процессоров, однако, по сути архитектура не менялась. Семейства Pentium II, Pentium III и Celeron имеют все то же строение ядра, отличаясь по сути только размером и организацией кеша второго уровня и наличием набора команд SSE, появившегося в Pentium III. Естественно, рано или поздно архитектура P6 должна была устареть, тем более что дальнейшее наращивание частоты существующих процессоров приводит все к меньшему росту их производительности. Проблема в том, что латентности, то есть задержки, возникающие при обращении к тем или иным узлам процессора, по нынешним меркам в P6 уже слишком велики. Именно это явилось основной причиной, по которой Intel затеял разработку Pentium 4, которая выполнена с чистого листа. В его основе лежит архитектура, названная Intel NetBurst architecture (пакетно-сетевая), основная цель которой - ускорить выполнение задач потоковой обработки данных, напрямую связанных с бурно развивающимся Internet, то есть ориентирована на эффективную работу с Интернет-приложениями. Но необходимо отметить, что в микроархитектуре NetBurst реализованы многие принципы, использованные в предыдущей модели Pentium III.
Микроархитектура процессора определяет реализацию его внутренней структуры, принципы выполнения поступающих команд, способы размещения и обработки данных. Характерными чертами этой микроархитектуры являются:
– гарвардская структура с разделением потоков команд и данных;
– суперскалярная архитектура, обеспечивающая одновременное выполнение нескольких команд в параллельно работающих исполнительных устройствах;
– динамическое изменение последовательности команд (выполнение команд с опережением — спекулятивное выполнение);
– конвейерное исполнение команд;
– предсказание направления ветвлений.
Практическая реализация данных принципов в структуре процессора Pentium 4 (рисунок 3.15) имеет ряд существенных особенностей:
1. разделения потоков команд и данных, поступающих от системной шины через блок внешнего интерфейса и размещённую на кристалле процессора общую кэш-память 2-го уровня (L2- Advanced Transfer Cache) ёмкостью 256 Кбайт. Такое размещение позволяет сократить время выборки команд и данных по сравнению с Pentuim III.
2. так как Pentium 4 ориентирован на обработку потоковых данных, скорость работы L2-кэша является одним из ключевых моментов. Поэтому, Intel увеличил пропускную способность кэша второго уровня в Pentium 4 в два раза. Таким образом, пропускная способность L2-кэша Pentium 4, работающего с частотой 1.4 ГГц имеет теперь внушительную величину 44.8 Мбайт/с.
3. Также как и в Pentium III, L2 кэш имеет восемь областей ассоциативности и строки длиной 128 байт. Однако, в отличие от Pentium III, каждая строка может быть изъята не целиком, а по 64-байтовым половинкам.
Блок внешнего интерфейса с помощью системной шины реализует обмен пpоцессоpа с памятью, контроллерами ввода/вывода и другими активными устройствами системы.
Системная шина состоит из:
– 64-разрядной двунаправленной шины данных;
– 41-разрядной шины адреса (33 адресных линии А35-3 и 8 линий выбора байтов BE7-0#), обеспечивающей адресацию до 64 Гбайт внешней памяти.
Дешифратор команд декодирует команды, формируя микрокоманды которые загружаются в кэш-память микрокоманд, откуда они выбираются для исполнения. Кэш-память может хранить до 12000 микрокоманд.
Для кэширования инструкций используется Trace Cache (Малый Кэш) в котором хранятся не классические x86 инструкции, а так называемые микрокоманды, более простые операции которыми непосредственно оперирует процессорное ядро. Сохранение в Trace Cache микроопераций позволяет избежать повторного декодирования x86 инструкций при повторном выполнении того же участка программы или при неправильном предсказании переходов. Поэтому при поступлении очередной команды блок трассировки выбирает из этой кэш-памяти необходимые микрокоманды, обеспечивающие её выполнение.
Особенность Trace Cache заключается в том, что микрооперации в нем сохраняются именно в том порядке, в каком они выполняются.
Если в потоке команд оказывается команда условного перехода (ветвления программы), то включается механизм предсказания ветвления, который формирует адрес следующей выбираемой команды до того, как будет определено условие выполнения перехода. Вероятность того, что переходы предсказываются неправильно, достаточно мала для того, чтобы отказаться от очевидного выигрыша, получаемого путем отказа от повторных декодирований и предсказаний переходов.
После формирования потоков микрокоманд производится выделение регистров, необходимых для выполнения декодированных команд. Эта процедура реализуется блоком распределения регистров, который выделяет для каждого указанного в команде логического регистра (регистра целочисленных операндов, регистра операндов с плавающей точкой ST0-ST7 или регистра блоков MMX, SSE,) один из 128 физических регистров, входящих в состав блоков регистров замещения (БРЗ). последовательности. Эта процедура
позволяет выполнять команды, использующие одни и те же логические регистры, одновременно или с
изменением их последовательности.
Рисунок 3.15 – Общая структура Pentium 4
Выбранные микрокоманды размещаются в очереди микрокоманд. В ней содержатся микрокоманды, реализующие выполнение 126 поступивших и декодированных команд, которые затем направляются в исполнительные устройства по мере готовности операндов. Увеличение числа команд, стоящих в очереди, позволяет более эффективно организовать поток их исполнения, изменяя последовательность выполнения команд и выделяя команды, которые могут выполняться параллельно.
Эти функции реализует блок распределения микрокоманд. Он выбирает микрокоманды из очереди не в порядке их поступления, а по мере готовности соответствующих операндов и исполнительных устройств. В результате команды, поступившие позже, могут быть выполнены до ранее выбранных команд. При этом реализуется одновременное выполнение нескольких микрокоманд (команд) в параллельно работающих исполнительных устройствах. Таким образом естественный порядок следования команд нарушается, чтобы обеспечить более полную загрузку параллельно включенных исполнительных устройств и повысить производительность процессора.
Суперскалярная архитектура реализуется путём организации исполнительного ядра процессора в виде ряда параллельно работающих блоков. Арифметико-логические блоки ALU производят обработку целочисленных операндов, которые поступают из заданных регистров БРЗ. В эти же регистры заносится и результат операции. При этом проверяются также условия ветвления для команд условных переходов и выдаются сигналы перезагрузки конвейера команд в случае неправильно предсказанного ветвления. Исполнительное ядро работает с повышенной скоростью выполнения операций (вдвое по отношению к самому процессору, Intel называет это Rapid Execute Engine).
блок формирования адреса (БФА) вычисляет адреса операндов, выбираемых из памяти, и реализует интерфейс с кэш-памятью данных 1-го уровня (L1) ёмкостью 8 Кбайт. В соответствии с заданными в декодированных командах способами адресации формируются 48 адресов для загрузки операндов из памяти в регистр БРЗ и 24 адреса для записи из регистра в память При этом БФА формирует адреса операндов для команд, которые ещё не поступили на выполнение.
При обращении к памяти БФА одновременно выдаёт адреса двух операндов:
– один для загрузки операнда в заданный регистр БРЗ,
– второй - для пересылки результата из БРЗ в память.
Таким образом реализуется процедура предварительного чтения данных для последующей их обработки в исполнительных блоках, которая называется спекулятивной выборкой.
Кэш-память данных (L1) имеет отдельные порты для чтения и записи, для увеличения производительности. Intel применил для доступа к L1-кешу новый алгоритм, чем уменьшил в Pentium 4 время обращения к кешу до двух процессорных тактов вместо трех тактов в Pentium III. За один такт производится выборка операндов для двух команд.
Блок формирования адресов вычисляет адрес для обращения к заданному сегменту памяти. Каждый сегмент может делиться на страницы, размещаемые в различных местах адресного пространства. Блоки трансляции адреса обеспечивают формирование физических адресов команд и данных при использовании страничной организации памяти. Для сокращения времени трансляции используется внутренняя буферная память (ITLB), которая хранит базовые адреса наиболее часто используемых страниц.
В Pentuim 4 используется гиперконвейерная технология выполнения команд, при которой число ступеней конвейера достигает 20. Таким образом одновременно в процессе выполнения может находиться до 20 команд, находящихся на разных стадиях (ступенях) их реализации. Благодаря декомпозиции выполнения каждой команды на более мелкие этапы, каждый из этих этапов теперь может выполняться быстрее, что позволяет увеличивать частоту процессора. Однако, у чрезмерно длинного конвейера есть и свои недостатки. Эффективность конвейера резко снижается из-за необходимости его перезагрузки при выполнении условных ветвлений, когда требуется произвести очистку всех предыдущих ступеней и выбрать команду из другой ветви программы.
Блок предсказания ветвлений сокращает потери времени, связанные с перезагрузкой конвейера. Ассоциативная память блока, называемая буфером адресов ветвлений (BTB - Branch Target Buffer), хранит 4092 адреса ранее выполненных переходов. Кроме того, BTB содержит биты, хранящие предысторию ветвления, которые указывают, выполнялся ли переход при предыдущих выборках данной команды.
При поступлении очередной команды условного перехода указанный в ней адрес сравнивается с содержимым BTB. Если этот адрес не содержится в BTB, то есть ранее не производились переходы по данному адресу, то предсказывается отсутствие ветвления. В этом случае продолжается выборка и декодирование команд, следующих за командой перехода. При совпадении указанного в команде адреса перехода с каким-либо из адресов, хранящихся в BTB, производится анализ предыстории. В процессе анализа определяется чаще всего реализуемое направление ветвления, а также выявляются чередующиеся переходы.
Если предсказывается выполнение ветвления, то выбирается и загружается в конвейер команда, размещённая по предсказанному адресу. Усовершенствованный блок предсказания ветвления, используемый в Pentuim 4, обеспечивает 90-% вероятность правильного предсказания. Таким образом резко уменьшается число перезагрузок конвейера при неправильном предсказании ветвления.
Процессор AMD 64
У AMD же подход полностью противоположный. Компания считает, что сейчас не время и не место для революций, а плавность эволюционного развития x86 со времен 8086 до Pentium 4 и Athlon XP, не должна прерываться. Исходя из этой идеи и формулировалась сама идеология создания процессора AMD следующего поколения - K8.
AMD предпочла более очевидный для компилятора путь, вдвое увеличив количество видимых ему регистров - в 64-бит режиме K8 имеет шестнадцать 64-бит регистров общего назначения. Количество регистров для операций с плавающей точкой осталось прежним - восемь, поскольку не на x87 при операциях с плавающей точкой здесь возлагается основная надежда, а на SIMD операции, потому и количество SIMD регистров также удвоено - тоже до шестнадцати. Дальше все зависит лишь от того режима, в котором работает процессор. Есть режим обратной совместимости, где K8 работает как обычный 32-бит процессор, не используя ничего из своих новых возможностей, кроме тех, что относятся к простому увеличению производительности процессора. Есть так называемый "long mode", который, в свою очередь, состоит из двух подрежимов: "64-bit mode" и "compatibility mode". Обязательно требуется наличие 64-бит OS, способной, впрочем, исполнять оба вида кода, как 64-бит, так и обычный x86. Естественно, что в последнем случае программа не будет иметь доступа к памяти выше 4 Гбайт, полному объему регистров, дополнительным регистрам, и т.д. В общем, в свое время Windows 95 примерно так же относилась к 16-бит и 32-бит программам.
По умолчанию регистры установлены в 32-бит режим, поскольку даже 64-бит программа не пользуется только 64-бит числами. Скорее, она даже не столько пользуется ими, сколько старыми добрыми 32-бит. Выделять под их хранение 64-бит регистры - напрасная трата ресурсов, так что по умолчанию - 32-бит. Если же программе потребовалась именно операция с 64-бит регистрами, она должна использовать специальный префикс при обращении к ним, длиной в один байт. Предполагается что 32-бит для подавляющего большинства всех необходимых программ для PC, рабочих станций, и Low-End серверов ближайшие несколько лет хватит, и здесь у Athlon 64 и Opteron перед Itanium несомненное преимущество - они не предлагают ненужных для этого рынка вещей за лишние деньги. Понадобятся 64-бит - всегда пожалуйста, нет - значит будем исполнять 32-бит в родном режиме, не занимаясь медленной эмуляцией.
Судя по словам разработчиков, одна только возможность доступа к увеличившемуся набору регистров (те самые дополнительные восемь и восемь) позволяет поднять скорость выполнения переписанного кода на десятки процентов. Добавим увеличившуюся производительность самого процессора за счет чисто технических новведений, при практически не увеличившейся стоимости (в отличие от Itanium), и получим отличный продукт для своей ниши.
Первый представитель ядра K8 уже вышел - это Opteron, серверный процессор для одно-, двух-, и четырехпроцессорных конфигураций, с перспективой выхода на 8-процессорные платформы.
Лекция 10
Дата добавления: 2016-02-24; просмотров: 1239;