Вы находитесь на странице: 1из 22

Микроархитектурный

уровень
Микроархитектурный уровень

В архитектурной иерархии компьютера он расположен над цифровым


логическим уровнем. Его задача - интерпретация команд уровня машинных
команд.

Чтобы выполнить машинную команду, необходимо:


 расшифровать ее,
 найти операнды,
 считать их,
 произвести операцию,
 записать результаты в память.

Эти действия выполняет микропрограмма. 2


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

В схеме на рисунке процессы выборки и дешифрации


(декодирования) команд выделены в отдельные
аппаратные блоки, выполняющие свои функции
самостоятельно.

При этом блок микропрограммного управления


оперирует микропрограммами меньшей длины, 4
включающими только микрокоманды
непосредственного выполнения инструкций.
Конвейеризация
Блок выборки команд может быть построен с использованием сдвигающего
регистра, загружаемого из памяти кодами команд в порядке их следования, и
ряда дополнительных регистров для копирования в них в порядке поступления в
сдвигающий регистр полей определенной длины. Это могут быть однобайтовые
или двухбайтовые поля выделяемых кодов операций, словарные поля
извлекаемых непосредственных операндов или смещений и другие. В результате
в готовом виде получаются все данные, необходимые для функционирования
последующих блоков процессора.
Блок дешифрации команд может быть организован с использованием в качестве
основы постоянного запоминающего устройства (ПЗУ), например, архитектуры
2D. Каждая строка ПЗУ, адресуемая кодом операции, содержит два поля. В
первом поле указана длина соответствующей команды, во втором – адрес ее
первой микрокоманды в управляющей памяти процессора.

5
Блок микропрограммного управления

Блок микропрограммного управления в каждом своем цикле (такте) выполняет с


использованием вычислительного тракта процессора очередную (взятую из очереди)
микрокоманду. При этом, цикл складывается из следующих последовательных этапов:
 считывание из очереди кода микрокоманды и установление сигналов управления
вычислительным трактом процессора (сигналов активизации регистров, управления АЛУ и
других);
 загрузка во входные шины АЛУ содержимого активизированных регистров;
 срабатывание АЛУ и схемы сдвига;
 стабилизация сигналов на выходной шине АЛУ и загрузка результатов в активизированные
регистры.

6
Увеличение длины конвейера
Каждый из перечисленных этапов выполняется своей частью
аппаратуры блока микропрограммного управления и
вычислительного тракта процессора. На каждом этапе
задействована только одна аппаратная часть, другие в это
время простаивают. Это можно использовать для
увеличения глубины (числа ступеней) конвейера, если
непрерывный процесс выполнения указанных шагов в одном
цикле разорвать введением дополнительных регистров-
защелок для фиксации состояний шин вычислительного
тракта (рис.) и поочередной (потактовой) активизации
управляющих сигналов кода микрокоманды. Сначала
активизируются сигналы управления доступом к входным
шинам, затем сигналы управления АЛУ и схемой сдвига и
только потом сигналы управления доступом к выходной
шине. Каждый такой шаг выполняется быстрее, чем полный
цикл вычислительного тракта. Поэтому тактовую частоту
процессора можно повысить, и пустить по новым ступеням
7
конвейера поток микрокоманд.
Конвейеризация
Конвейеризация, как способ повышения производительности процессора,
хорошо работает с линейным кодом программы. Продвижение по ступеням
конвейера последовательно выбираемых команд одна за другой экономит
общее время, затрачиваемое на выполнение программы. Число ступеней
конвейера от процессора к процессору может меняться. Так, у процессора
Pentium конвейер пятиступенчатый, глубина конвейера Pentium II составляет
12, Pentium III – 10, а у Pentium IY она достигает 20 ступеней, Core 2 Duo – 31
ступень.
Увеличение длины конвейера, связанное с декомпозицией процесса
выполнения команды на более мелкие этапы, позволяет существенно
увеличить частоту процессора.
Однако, каждая команда при этом выполняется дольше, т.к. проходит
большее число этапов. Это приводит к потерям времени при очищении и
перезагрузке конвейера в случаях ошибок в предсказании переходов.
8
Технология предсказания переходов
Технология предсказания переходов (прогнозирования ветвлений), широко
применяемая в современных процессорах, направлена на то, чтобы сохранить
сформированный конвейер, не снижая его производительности.
Поскольку декодирование происходит на следующей стадии после выборки
команды, то до распознания команды перехода и определения нового направления
выборки команд уже могут быть вызваны некоторые коды ненужных команд.
Для исключения таких ситуаций может быть применена технология отсрочки
ветвления, согласно которой компилятор заполняет одну или несколько позиций
после команды перехода полезными с его точки зрения командами или пустыми
командами, не производящими никаких действий. Это не нарушает правильности
выполнения программы, но приводит к значительным потерям на холостых циклах.
Поэтому в современных процессорах предусматриваются специальные аппаратные
средства предсказания переходов.
 
9
Технологии прогнозирования переходов

Технологии динамического прогнозирования переходов реализуют прогнозы


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

10
Динамическое предсказание переходов
Динамическое предсказание переходов предусматривает наличие в составе
аппаратного обеспечения процессора специального блока BTB (Branch Target Buffer
– буфер цели перехода). Широко распространенным подходом к организации такого
блока является фиксация всех переходов в специальной таблице динамики
переходов.
Строка таблицы содержит поля для указания ее достоверности, адреса команды
перехода и одного или нескольких битов прогнозирования перехода. Возможно
также наличие поля для непосредственного сохранения целевого адреса
последнего перехода.
По m младшим разрядам адреса очередной выбранной команды перехода
определяется строка таблицы (общее число строк 2m) и проверяется совпадение
указанного в ней тега со старшей составляющей адреса команды. Если совпадение
имеет место и строка достоверна, то, в соответствии с битом прогноза,
определяется переход. При несовпадении срабатывает та или иная
предусмотренная эвристика (например, можно пойти вперед по линейному коду или
отдать предпочтение переходу назад).
11
 
Выполнение с изменением последовательности
Выполняемая программа состоит из отдельных команд. Команды часто находятся во
взаимозависимости. Чтобы достичь лучшей производительности, некоторые процессоры
пропускают взаимозависимые команды и переходят к выполнению независимых
команд. Таким образом гарантируется актуальность предварительной выборки, но
последовательность выполнения команд отличается от запрограммированной. При этом,
очевидно, переупорядочивание команд не должно изменять результаты их естественного
выполнения. Для этого требуется исследование видов взаимозависимости команд. Их можно
выделить три:
 RAW (Read After Write) – операнд очередной команды является результатом предыдущей
команды;
 WAR (Write After Read) – предыдущая команда должна завершить считывание регистра до
того как следующая его перезапишет;
 WAW (Write After Write) – очередная команда должна записать результат в регистр после
того как предыдущая команда запишет этот же регистр.

В отличие от RAW-зависимости, носящей принципиальный характер, WAR- и WAW-


зависимости можно устранить, введя дополнительные ресурсы для записи результатов.
12
Подмена регистров

Очевидно, что технология изменения последовательности команд более


эффективна для программ с меньшей взаимозависимостью команд. Ее можно
уменьшить искусственными методами. Одним из них является подмена регистров.
Современные процессоры содержат десятки скрытых регистров, используемых для
записи промежуточных результатов. Замена обычных регистров скрытыми во многих
случаях позволяет устранить WAR- и WAW-взаимозависимости команд  

13
Примеры микроархитектурного
уровня

14
Микроархитектура Pentium II
Pentium II поддерживает 32-битные операнды и арифметику, а также 64-битные операции
с плавающей точкой. Процессор может адресовать до 64 Гбайт памяти и счи­тывать слова
из памяти по 64 бита за один раз. Микросхема центрального процессора содержит кэш-­
память первого уровня, а кэш-памяти второго уровня размещена на отдельной микросхеме.
Команды, выполняемы процессором хранятся в пуле команд. Информация в пуле команд
находится в виде таблицы, которая называется ROB (ReOrder Buffer - буфер
переупорядочивания команд).
Микроархитектура Pentium II содержит:
 Блок выборки/декоди­рования - загружает команды из памяти и разбивает их на
микрооперации для хранения в ROB.
 Блок отправки/выполнения получает микрооперации из буфе­ра ROB и выполняет их.
 Блока возврата завершает выполнение каждой операции и обновляет регистры. Команды
поступают в буфер ROB в порядке расположения, выпол­няться могут в произвольном
порядке, но завершаться должны в запрограммированном порядке.
 Блок сопряжения с шиной отвечает за обмен информацией с системой памяти (как с кэш-
памятью второго уровня, так и с основной памятью).

15
Схема процессора
Pentium II
 Fetch/Decode Unit - модуль
загрузки/декодирования инструкций ,
 Dispatch/Execute Unit - модуль
диспетчеризации/исполнения инструкций,
Retire Unit - модуль завершения и удаления
инструкций,
 Instruction Pool - пул инструкций, его также
называют Reorder Buffer — буфер
переупорядочивания инструкций,
Bus Interface Unit - модуль внешнего
интерфейса,
L1 ICache - L1-кэш для инструкций,
L1 DCache - L1-кэш для данных.

16
Схема модуля выборки/декодирования
процессора Pentium II
Блок Next_IP вычисляет индекс (порядковый номер)
инструкции, содержащейся в L1-кэше инструкций, которая
должна быть извлечена из L1-кэша инструкций и передана
для последующего декодирования.
Индекс этой инструкции вычисляется блоком Next_IP на
основе поступающей в него информации о прерываниях,
которые были переданы в процессор для обработки,
возможных предсказанных переходах (предсказание
выполняется блоком Branch Target Buffer), и сообщениях о
неправильно предсказанных переходах, которые поступают от
целочисленных вычислительных ресурсов, расположенных в
модуле Dispatch/Execute Unit. После вычисления индекса
следующей обрабатываемой инструкции L1-кэш инструкций
извлекает две строки кэшированных данных — ту, которая
соответствует вычисленному индексу, и следующую за ней, —
а затем передает для декодирования извлеченные 16 байт, 17

которые содержат IA-инструкции (Intel Architecture).


Микроархитектура UltraSPARC II
UltraSPARC, произведенная компанией Sun, UltraSPARC II -
это машина с 64-разрядными регистрами и 64-
разрядным трактом данных. Хотя внутренняя
архитектура машины использует 64 разря­да, ширина
шины памяти составляет 128 битов.
Серия SPARC с самого начала представляла собой
систему RISC. У боль­шинства команд есть два входных и
один выходной регистр, поэтому они хорошо подходят
для конвейерного выполнения в одном цикле. Разбивать
коман­ды CISC на микрооперации RISC, как в системе
Pentium II, не требуется.
UltraSPARC II - это суперскалярная машина, которая
может выдавать на выполнение 4 ко­манды за цикл.
Команды считываются по порядку, но запускаться и
завершаться могут в произвольном порядке. За
исключением кэш-памяти второго уровня, все
компоненты UltraSPARC II расположены на микросхеме
центрального процессора. Внутренний кэш команд - это 18

16 Кбайт двухвходовой ассоциативной кэш-памяти, со


Функциональные блоки системы UltraSPARC
II.
Блок выборки/ отправки похож на блок выборки/декодирования в системе Pentium II.
Однако у него работа проще, поскольку входные команды изначально представлены в
виде микроопераций. Блок может выбирать команды из кэш-памяти как первого, так и
второго уровня.
Схема группировки - это блок, который выбирает по четыре команды за один раз из
очереди для запуска. Его задача состоит в том, чтобы найти 4 команды, которые
можно выпустить одновременно.
Блок целых чисел содержит два раздельных АЛУ, что позволяет выполнять две
команды параллельно.
Блок вычислений с плаваю­щей точкой также содержит два АЛУ. Следовательно, в
одной группе может нахо­диться по две команды каждого типа. Чтобы сделать
группирование оптимальным, команды могут запускаться не по поряд­ку. Завершаются
они также в произвольном порядке.

19
Микроархитектура picoJava II
В системе picoJava II двоичные программы JVM могут
работать практически без интерпретации. Большинство
команд JVM выполняются непосредственно аппа­ратным
обеспечением за один цикл. Лишь небольшое число команд
не может выполняться аппа­ратным обеспечением picoJava II.
Эти команды связаны с такими особенностями JVM как
создание и управле­ние сложными программными объектами.
Микросхема процессора picoJava II содержит разделенную
кэш-память первого уровня. Объем каждой может составлять
1, 2, 4, 8 или 16 Кбайт с размером строки 16 байтов. Кэш-
память команд является памятью прямого отображения. Кэш-
память данных - это двухвходовая ассоциативная кэш-память.
Каждая кэш-память соединяется с шиной памяти по 32-
битному каналу.

20
Блоки Микроархитектура picoJava II
Кэш-память команд передает в блок выборки, декодирования и свертывания по 8 байтов за
раз. Этот блок, в свою очередь, связан с контроллером выполнения и с основным трактом
данных (блоком операций с целыми числами и с плавающей точкой). Ширина тракта данных
составляет 32 бита для целочисленных операций. Этот тракт данных может также
оперировать числами с плавающей точкой с одинарной и двойной точностью.
Интересной частью picoJava II является регистровый файл, состоящий из 64-х 32-битных
регистров. В этих регистрах могут содержаться верхние 64 слова стека JVM, что значительно
повышает скорость доступа к словам в стеке. JVM имеет стек операндов и стек локальных
переменных. Оба они могут находиться в регистровом файле. Доступ к регистровому файлу
происходит без задержек, тогда как доступ к кэш-памяти данных требует дополнительного
цикла.
Блок декодирования умеет свертывать команды. Процесс свертыва­ния происходит только
тогда, когда требуемые локальные переменные находятся содержатся в регистровом файле.
Избавление от обращений к памяти - основной способ повышения производительности.
Однако машина picoJava II делает больше. Рассматриваемая последовательность четырех
команд просто складывает два регистра и сохраняет полученное значе­ние в третьем
регистре. Блок декодирования распознает эту ситуацию и запускает 21 лишь одну
микрооперацию: трехрегистровую команду ADD.
Сравнение архитектур

Несмотря на большие различия, микроархитектуры всех трех машин имеют сходные


функциональные блоки.
Их микрооперации имеют одинаковую структуру - содержат код операции, два
входных регистра и один выходной регистр.
Все машины могут вы­полнять микрооперацию за один цикл, конвейеризированы и
применяют прогнозирование ветвления.
Все они содержат разделенную кэш-память для ко­манд и для данных, объем
каждой составляет 16 Кбайт.
Главное различие между рассмотренными процессорами составляет переход от команд
к микрокомандам.
Pentium II приходится разбивать CISC-команды, чтобы преобразовать их в
трехрегистровый формат, необходимый для функционального блока.
У машины picoJava II обратная основная задача - скомбинировать несколько команд
для полу­чения микрооперации. Машине UltraSPARC II в этом плане вообще не нужно
ничего делать, поскольку ее первоначальные ко­манды уже представляют собой
микрооперации. 22

Вам также может понравиться