ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 24.12.2021

Просмотров: 12165

Скачиваний: 10

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
background image

318

Глава 4. Микроархитектурный уровень

Из регистра ROB/

в регистр ROB

Резервация

ПортО

Порт1

Порт 2

ПортЗ

Порт 4

Блок выполнения

команд ММХ

Блок выполнения

операций над

числами с

плавающей точкой

Блок выполнения

операций над

целыми числами

Блок выполнения

команд ММХ

Блок выполнения

операций над

числами с

плавающей точкой

Блок выполнения

операций над

целыми числами

Блок загрузки

Блок

сохранения

Блок

сохранения

- Загрузка

- Сохранение

- Сохранение

Рис. 4.33.

 Блок отправки/выполнения

Блок возврата

Когда микрооперация выполнена, она переходит обратно в резервацию, а затем

в буфер ROB, и там ожидает возврата. Блок возврата отвечает за отправку результа-
тов в нужные места — в соответствующий регистр или в другие устройства блока
отправки/выполнения, которым требуется данное значение. Блок отправки/вы-

полнения содержит «официальные» регистры, то есть те, в которых хранятся зна-

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

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

поскольку выполнение предыдущих команд не закончилось.

Система Pentium II поддерживает процедуру спекулятивного выполнения, по-

этому некоторые команды будут выполняться напрасно, и их результаты никуда

не нужно будет сбрасывать. Именно поэтому и нужна способность возвращаться
в предыдущее состояние. Если стало известно, что какая-то микрооперация пришла

из команды, которую не нужно было выполнять, результаты этой микрооперации


background image

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

отбрасываются. Все это контролирует блок возврата. Только результаты «офици-

ально» выполненных команд могут возвращаться в регистры, причем это должно

происходить в том же порядке, что и в программе, даже если команды выполня-

лись в произвольном порядке.

Микроархитектура процессора UltraSPARC II

Серия UltraSPARC, произведенная компанией Sun, — это реализация версии 9 ар-

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

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

UltraSPARC II — это 64-разрядная машина с 64-разрядными регистрами и

64-разрядным трактом данных, но в целях совместимости с машинами версии 8

(которые являются 32-разрядными) она может обращаться с 32-разрядными опе-

рандами, а программное обеспечение, написанное для 32-разрядных версий SPARC,

изменять не нужно. Хотя внутренняя архитектура машины использует 64 разря-

да, ширина шины памяти составляет 128 битов, аналогично процессору Pentium II

с 32-разрядной архитектурой и 64-разрядной шиной памяти. Ядро системы Ultra-
SPARC II показано на рис. 3.44.

Вся серия SPARC с самого начала представляла собой систему RISC. У боль-

шинства команд есть два входных и один выходной регистр, поэтому они хорошо

подходят для конвейерного выполнения в одном цикле. Разбивать старые коман-

ды CISC на микрооперации RISC, как в системе Pentium II, не нужно.

UltraSPARC II — это суперскалярная машина, которая может выдавать 4 ко-

манды за цикл. Команды запускаются по порядку, но завершаться могут и в произ-

вольном порядке. Тем не менее прерывания являются точными (то есть всегда точно

известно, в каком месте программы была машина, когда произошло прерывание).

Существует аппаратная поддержка для спекулятивных загрузок в виде команды
PREFETCH, которая не вызывает ошибок при промахе кэша. Она даже не блокиру-
ет последовательные обращения к памяти. Следовательно, компилятор может
вставлять одну или несколько команд PREFETCH задолго до того, как они понадо-

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

Общий обзор системы UltraSPARC II

Диаграмма UltraSPARC II представлена на рис. 4.34. Все указанные компоненты

расположены на микросхеме центрального процессора. Исключение составляет
кэш-память второго уровня, которая является внешней по отношению к процессо-

ру. Кэш команд — это 16 Кбайт двувходовой ассоциативной кэш-памяти, со стро-
ками по 32 байта и с возможностью возврата половины строки. Половина строки
кэш-памяти (16 байтов) содержит ровно четыре команды, и все эти четыре коман-

ды могут выдаваться за один цикл. Кэш-память данных — это 16 Кбайт кэш-памя-

ти прямого отображения со сквозной записью и без заполнения по записи. Здесь

тоже используются 32-байтные строки, разделенные на 2 части по 16 байтов.


background image

3 2 0

Глава 4. Микроархитектурный уровень

Связь с основной

памятью

Интерфейс памяти

Кэш-память

второго уровня

Внешняя кэш-память

Блок выборки/отправки

Кэш-память

первого уровня

Схемы группировки

Блок выполнения команд

с целыми числами

Регистры для

целых чисел

АЛУ

АЛУ

Блок выполнения команд

с целыми числами

Регистры с

плавающей точкой

АЛУ с

плавающей

точкой

АЛУ с

плавающей

точкой

Графический блок

Блок загрузки/

сохраниния

Кэш-память

первого уровня

для данных

Очередь

на загрузку

Очередь

на сохранение

Рис. 4.34.

 Микроархитектура UltraSPARC II

В случае промаха кэш-памяти первого уровня нужная строка ищется в кэш-

памяти второго уровня. Если поиск завершился успехом, строка копируется в кэш-
память первого уровня. В случае неудачи внешняя кэш-память (кэш-память вто-

рого уровня) посылает устройству сопряжения с памятью команду вызова строки
из основной памяти.

Рассмотрим функциональные блоки системы UltraSPARC II. Блок выборки

отправки в целом похож на блок вызова/декодирования в системе Pentium II

(см. рис. 4.31). Однако у этого блока работа проще, поскольку входные команды

уже представлены в трех регистрах в виде микроопераций, поэтому их не нужно

разбивать. Блок может вызывать команды и из кэш-памяти первого уровня, и из
кэш-памяти второго уровня без потери времени. За один цикл вызываются четыре
команды.

Чтобы сократить неприятные последствия неправильно предсказанных перехо-

дов, каждая группа из четырех команд в кэш-памяти команд содержит адрес, кото-

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


background image

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

При этом используется 2-битный алгоритм прогнозирования, сходный с тем, кото-

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

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

Схема группировки — это блок, который выбирает по четыре команды за один

раз из очереди для запуска. Задача состоит в том, чтобы найти 4 команды, которые
можно выпустить одновременно. Блок целых чисел содержит два раздельных АЛ У,

что позволяет выполнять две команды параллельно. Блок вычислений с плаваю-
щей точкой также содержит два АЛ У. Следовательно, в одной группе может нахо-

диться по две команды каждого типа, но не четыре команды одного типа. Чтобы

сделать группирование оптимальным, команды должны запускаться не по поряд-
ку, что разрешается Завершаются они также в произвольном порядке.

Блок целых чисел и блок вычислений с плавающей точкой содержат собствен-

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

лены, поэтому значения никогда не переходят из одного блока в другой. В блоке

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

део, аналогичные командам ММХ в системе Pentium II.

Блок загрузки/сохранения управляет командами LOAD и STORE. Если они имеют-

ся в кэш-памяти данных первого уровня, то выполняются без задержки. В против-
ном случае нужная строка берется из кэш-памяти второго уровня или основной
памяти (если речь идет о команде LOAD) или нужное слово записывается туда (если
речь идет о команде STORE). Если бы кэш-память данных была write-al locate, тогда
в случае промаха кэш-памяти при записи (команда STORE) нужная строка перено-
силась бы из кэш-памяти второго уровня или из основной памяти. На самом деле,

если нужно сохранить отдельное слово, просто осуществляется сквозная запись
в кэш-память второго уровня, а в случае промаха — в основную память. Чтобы избе-
жать блокирования из-за отсутствия нужного слова в кэш-памяти данных, блок
загрузки/сохранения хранит очереди незавершенных команд LOAD и STORE, поэтому

можно продолжать обрабатывать новые команды, пока завершается выполнение
старых.

Конвейеризация системы UltraSPARC II

Система UltraSPARC II содержит конвейер с 9 стадиями. Некоторые из этих ста-

дий различны для команд с целыми числами и команд с плавающей точкой

(рис. 4.35). На первой стадии вызываются команды из кэш-памяти команд (если

это возможно). При благоприятных обстоятельствах (отсутствии промахов кэш-

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

правильной смеси команд и т. п.) машина может продолжать вызывать и запус-

кать по 4 команды за цикл. На стадии декодирования перед копированием команд
в очередь к каждой команде прибавляются дополнительные биты. Эти биты уско-

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


background image

322

Глава 4. Микроархитектурный уровень

Конвейер для обработки целых чисел

Вызов

н

Выполнение —

*-

Кэш

г**

N1

N

2

/ V . .

Декодирование

Группировка

N

3 ^ Запись

ч /

Регистр

х

2

Х

3

Конвейер для обработки чисел с плавающей

точкой и графических данных

Рис. 4.35.

 Конвейер системы UltraSPARC II

Стадия группировки соответствует схеме группировки, которую мы рассмат-

ривали раньше. На этой стадии декодированные команды объединяются в груп-
пы. В каждой группе находится по 4 команды. Все команды одной группы должны
быть подобраны таким образом, чтобы их можно было выполнять одновременно.

С этого момента стадии конвейера для операций с целыми числами и для опе-

раций с плавающей точкой разделяются. На стадии 4 в блоке целых чисел боль-
шинство команд выполняется прямо за один цикл. Однако команды STORE и

LOAD требуют дополнительной обработки на стадии кэширования. На стадиях

Ni и N

2

 не производится никаких действий для команд, но эти стадии нужны для

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

Блок с плавающей точкой содержит отдельные 4 стадии. Первая нужна для

доступа к регистрам с плавающей точкой. Следующие три нужны для выполнения

команды. Все команды с плавающей точкой выполняются за три цикла, за исклю-

чением деления (на эту операцию требуется 12 циклов) и квадратного корня (здесь

нужно 22 цикла), поэтому длинная последовательность других команд не снижает

скорости работы конвейера.

Стадия N

3

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

ситуаций, например деления на нуль. Наконец, на последней стадии результаты
записываются обратно в регистры. Эта стадия напоминает блок возврата системы

Pentium II в том, что если команда прошла через эту стадию, она завершена.

Микроархитектура процессора picoJava II

В системе picoJava II двоичные программы JVM могут работать практически без

интерпретации. Большинство команд JVM выполняются непосредственно аппа-
ратным обеспечением за один цикл. Около 30 команд JVM являются микропро-
граммными. Только очень небольшое число команд не может выполняться аппа-
ратным обеспечением picoJava II и вызывает traps (ловушки). Эти команды связаны
с особенностями JVM, которые мы не обсуждали, например создание и управле-

ние сложными программными объектами.