ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 24.12.2021
Просмотров: 12165
Скачиваний: 10

318
Глава 4. Микроархитектурный уровень
Из регистра ROB/
в регистр ROB
Резервация
ПортО
Порт1
Порт 2
ПортЗ
Порт 4
Блок выполнения
команд ММХ
Блок выполнения
операций над
числами с
плавающей точкой
Блок выполнения
операций над
целыми числами
Блок выполнения
команд ММХ
Блок выполнения
операций над
числами с
плавающей точкой
Блок выполнения
операций над
целыми числами
Блок загрузки
Блок
сохранения
Блок
сохранения
- Загрузка
- Сохранение
- Сохранение
Рис. 4.33.
Блок отправки/выполнения
Блок возврата
Когда микрооперация выполнена, она переходит обратно в резервацию, а затем
в буфер ROB, и там ожидает возврата. Блок возврата отвечает за отправку результа-
тов в нужные места — в соответствующий регистр или в другие устройства блока
отправки/выполнения, которым требуется данное значение. Блок отправки/вы-
полнения содержит «официальные» регистры, то есть те, в которых хранятся зна-
чения завершенных команд. Блок возврата содержит ряд «промежуточных» реги-
стров, значения которых были вычислены командой, которая еще не завершилась,
поскольку выполнение предыдущих команд не закончилось.
Система Pentium II поддерживает процедуру спекулятивного выполнения, по-
этому некоторые команды будут выполняться напрасно, и их результаты никуда
не нужно будет сбрасывать. Именно поэтому и нужна способность возвращаться
в предыдущее состояние. Если стало известно, что какая-то микрооперация пришла
из команды, которую не нужно было выполнять, результаты этой микрооперации

Примеры микроархитектурного уровня 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 байтов.

3 2 0
Глава 4. Микроархитектурный уровень
Связь с основной
памятью
Интерфейс памяти
Кэш-память
второго уровня
Внешняя кэш-память
•
Блок выборки/отправки
Кэш-память
первого уровня
Схемы группировки
•
Блок выполнения команд
с целыми числами
Регистры для
целых чисел
АЛУ
АЛУ
•
•
Блок выполнения команд
с целыми числами
Регистры с
плавающей точкой
АЛУ с
плавающей
точкой
АЛУ с
плавающей
точкой
Графический блок
•
Блок загрузки/
сохраниния
Кэш-память
первого уровня
для данных
Очередь
на загрузку
Очередь
на сохранение
Рис. 4.34.
Микроархитектура UltraSPARC II
В случае промаха кэш-памяти первого уровня нужная строка ищется в кэш-
памяти второго уровня. Если поиск завершился успехом, строка копируется в кэш-
память первого уровня. В случае неудачи внешняя кэш-память (кэш-память вто-
рого уровня) посылает устройству сопряжения с памятью команду вызова строки
из основной памяти.
Рассмотрим функциональные блоки системы UltraSPARC II. Блок выборки
отправки в целом похож на блок вызова/декодирования в системе Pentium II
(см. рис. 4.31). Однако у этого блока работа проще, поскольку входные команды
уже представлены в трех регистрах в виде микроопераций, поэтому их не нужно
разбивать. Блок может вызывать команды и из кэш-памяти первого уровня, и из
кэш-памяти второго уровня без потери времени. За один цикл вызываются четыре
команды.
Чтобы сократить неприятные последствия неправильно предсказанных перехо-
дов, каждая группа из четырех команд в кэш-памяти команд содержит адрес, кото-
рый указывает, какую именно половинчатую строку нужно взять следующей. Кроме
того, предсказывающее устройство находится внутри блока выборки отправки.

Примеры микроархитектурного уровня 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 команды за цикл. На стадии декодирования перед копированием команд
в очередь к каждой команде прибавляются дополнительные биты. Эти биты уско-
ряют последующую обработку (например, сразу отправляя команду в соответству-
ющий функциональный блок).

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, которые мы не обсуждали, например создание и управле-
ние сложными программными объектами.