уровень
Микроархитектурный уровень
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) – очередная команда должна записать результат в регистр после
того как предыдущая команда запишет этот же регистр.
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
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.
Сравнение архитектур