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

328 Глава 4. Микроархитектурный уровень
зует два регистра в качестве источников, пропускает значения этих регистров че-
рез АЛУ и сохраняет результат в регистре. На рисунке 4.22 представлено графи-
ческое изображение такого конвейера. Для современной техники это наиболее
эффективная разработка.
Главное различие между Pentium II, UltraSPARC II и picojava II — переход от
набора команд к функциональному блоку. Компьютеру Pentium II приходится
разбивать команды CISC, чтобы переделать их в трехрегистровый формат, кото-
рый нужен для функционального блока. Именно этот процесс показан на рис. 4.32 —
разбиение больших команд на маленькие микрооперации. У машины picojava II
обратная проблема — как скомбинировать несколько команд вместе, чтобы полу-
чить простую микрооперацию. Такой процесс называется свертыванием. Машине
UltraSPARC II вообще не нужно ничего делать, поскольку ее первоначальные ко-
манды уже представляют собой маленькие удобные микрооперации. Вот почему
большинство новых архитектур команд — архитектуры типа RISC, если, конечно,
у них нет какого-нибудь скрытого мотива (например, вызов программ на языке
Java через Интернет и их выполнение на произвольной машине).
Полезно будет сравнить нашу последнюю разработку, микроархитектуру Mic-4,
с этими тремя реальными машинами. Mic-4 больше всего похожа на Pentium II.
Обе системы интерпретируют команды, которые не являются командами типа
RISC. Для этого обе системы разбивают команды на микрооперации с кодом опе-
рации, двумя входными регистрами и одним выходным регистром. В обоих случа-
ях помещаются в очередь для дальнейшего выполнения. Микроархитектура Mic-4
запускает микрооперации строго по порядку, выполняет их строго по порядку и
завершает выполнение тоже строго по порядку, a Pentium II запускает по порядку,
выполняет в произвольном порядке, а завершает опять по порядку. Кроме того,
внутренняя структура конвейера Pentium II, особенно та его часть, которая пока-
зана на рис. 4.32, во многом сходна с Mic-4.
А теперь сравним Mic-4 с picojava П. Хотя кажется, что эти две архитектуры
должны быть похожи по логике вещей — они интерпретируют один и тот же набор
команд, но на самом деле это не совсем так. Причина этого различия состоит в том,
что блоки декодирования имеют диаметрально противоположные стратегии. Mic-4
берет каждую входящую команду IJVM и сразу разбивает ее на микрооперации,
a picojava II пытается соединить (свернуть) несколько команд IJVM в одну мик-
рооперацию. Простая операция присваивания i=j+k занимает 14 циклов на Mic-4
и 1 цикл на picojava II. В данном случае свертывание улучшает производитель-
ность в 14 раз. Очевидно, что второй метод ведет к более быстрому выполнению
команд, но сложность процесса свертывания тоже существенна.
Mic-4 и UltraSPARC II вообще нельзя сравнивать, поскольку команды систе-
мы UltraSPARC II — это команды RISC (то есть трехрегистровые микрооперации).
Их не нужно ни разбивать, ни объединять. Их можно выполнять в том виде, в ка-
ком они есть, каждую за один цикл тракта данных.
Все четыре машины конвейеризированы. Pentium II имеет 12 стадий, Ultra-
SPARC II — 9 стадий, picojava II — 6 стадий, Mic-4 — 7 стадий. У Pentium II боль-
ше стадий, поскольку этой машине приходится разбивать сложные команды.
UltraSPARC II содержит больше стадий, чем ему нужно, поскольку конвейер для
целочисленных вычислений был искусственно удлинен на 2 стадии, чтобы опера-

Краткое содержание главы 329
ции с целыми числами занимали столько же времени, сколько занимают операции
с плавающей точкой. Отсюда следует вывод: при современном состоянии техники
оптимальным является конвейер с шестью или семью стадиями, который обраба-
тывает трехрегистровые микрооперации. Микроархитектура Mic-4 дает хорошее
представление о том, как работает такой конвейер (по крайней мере, с командами,
которые не являются командами типа RISC).
Краткое содержание главы
Основным компонентом любого компьютера является тракт данных. Он содер-
жит несколько регистров, две или три шины, один или несколько функциональ-
ных блоков, например АЛУ, и схему сдвига. Основной цикл состоит из вызова
нескольких операндов из регистров и их передачи по шинам к АЛ У и другому функ-
циональному блоку. После выполнения операции результаты сохраняются опять
в регистрах.
Тракт данных может управляться задатчиком последовательности, который
вызывает микрокоманды из управляющей памяти. Каждая микрокоманда содер-
жит биты, управляющие трактом данных в течение одног о цикла. Эти биты опре-
деляют, какие операнды нужно выбирать, какую операцию нужно выполнять и
что нужно делать с результатами. Кроме того, каждая микрокоманда определяет
своего последователя (обычно в ней содержится адрес следующей микрокоман-
ды). Некоторые микрокоманды изменяют этот базовый адрес с помощью опера-
ции ИЛИ
IJVM — это машина со стековой организацией и с 1-байтными кодами опера-
ций, которые помещают слова в стек, выталкивают слова из стека и выполняют
различные операции над словами из стека (например, складывают их) В главе
приводится микропрограмма для микроархитектуры Mic-1. Если добавить блок
выборки команд для загрузки команд из потока байтов, то можно устранить боль-
шое количество обращений к счетчику команд, и тогда скорость работы машины
сильно повысится,
Существует множество способов разработки микроархитектурного уровня Есть
много различных вариантов
1
двухшинная архитектура — трехшинная архитекту-
ра, кодированные поля микрокоманды — декодированные поля микрокоманды,
наличие или отсутствие вызова с упреждением и многие другие Mic-1 — это про-
стая машина с программным управлением, последовательным выполнением ко-
манд и полным отсутствием параллелизма. Mic-4, напротив, является высокопа-
раллельной микроархитектурой с конвейером с семью стадиями.
Производительность компьютера можно повысить несколькими способами.
Главный способ — использование кэш-памяти. Кэш-память прямого отображения
и ассоциативная кэш-память с множественным доступом широко используются
для того, чтобы ускорить обращения к памяти. Кроме того, применяется прогно-
зирование ветвления (как статическое, так и динамическое), исполнение с изме-
нением последовательности и спекулятивное выполнение команд.
Наши три примера, Pentium II, UltraSPARC II и picojava II, во многом отлича-
ются друг от друга, но при этом удивительно похожи в плане выполнения команд.

330 Глава 4. Микроархитектурный уровень
Pentium II берет команды CISC и разбивает их на микрооперации, которые обраба-
тываются суперскалярной архитектурой с прогнозированием ветвления, изменени-
ем последовательности команд и спекулятивным выполнением. UltraSPARC II —
это современный 64-разрядный процессор с командами типа RISC. Здесь тоже
используется прогнозирование ветвления, исполнение с изменением последова-
тельности и спекулятивные команды. Picojavall представляет собой более про-
стой процессор, предназначенный для дешевых устройств, поэтому у него нет та-
ких особенностей, как динамическое прогнозирование ветвления. Однако при
применении свертывания команд эта машина способна выполнять команды J VM
достаточно быстро, как будто это регистровые команды RISC. Все три машины
содержат сходные функциональные блоки, которые обрабатывают трехрегистро-
вые микрооперации, когда они проходят через конвейер.
Вопросы и задания
1. В табл. 4.1 показан один из способов получения результата
Л
на выходе из
АЛУ. Приведите другой способ.
2. В микроархитектуре Mic-1 требуется 1 не на установку регистра MIR, 1 не —
на передачу значения регистра на шину В, 3 не — на запуск АЛУ и схемы
сдвига и 1 не — на передачу результатов обратно в регистры. Длительность
синхронизирующего импульса составляет 2 не. Может ли такая машина
работать с частотой 100 МГц? А 150 МГц?
3. На рис. 4.5 регистр шины В закодирован в 4-битном поле, а шина С пред-
ставлена в виде битового отображения. Почему?
4. На рис. 4.5 есть блок «Старший бит». Нарисуйте его схему.
5. Когда в микрокоманде установлено поле JMPC, регистр MBR соединяется
операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следую-
щей микрокоманды. Существуют ли такие обстоятельства, при которых
имеет смысл использовать JMPC, если NEXT_ADDRESS — OxlFF?
6. Предположим, что в примере, приведенном в листинге 4.1, выражение i-0:
добавляется после условного оператора. Каким будет новый код ассембле-
ра? Предполагается, что компилятор является оптимизирующим.
7. Напишите две трансляции IJVM для следующего высказывания на языке
Java: i=j+k+4;
8. Напишите на языке Java выражение, которое произвело следующую про-
грамму IJVM:
ILOAD j
ILOAD k
ISUB
BIPUSH 6
ISUB
DUP
IADD
ISTORE i

Вопросы и задания 331
9. В этой главе мы упомянули, что во время трансляции выражения
if Ш goto LI; else goto L2
в двоичную форму
L2
должно находиться среди младших 256 слов управ-
ляющей памяти. А возможно ли иметь
L1,
скажем, в ячейке с адресом 0x40,
a
L2 —
в ячейке с адресом 0x140? Объясните, почему.
10. В микропрограмме для Mic-1 в микрокоманде if__cmpeq3 значение регистра
MDR копируется в регистр Н, а в следующей строке от него отнимается
значение регистра TOS. Казалось бы, это удобнее записать в одном вы-
сказывании:
if_cmpeq3 Z-MDR-TOS. rd
Почему этого не делают?
11. Сколько времени потребуется машине Mic-1, которая работает с частотой
200 МГц, на выполнение следующего высказывания на языке Java: i=j+k;
Ответ дайте в наносекундах.
12. Тот же вопрос, что и предыдущий, только для машины Mic-2 с частотой
200 МГц. Опираясь на это вычисление, ответьте, сколько времени займет
выполнение программы на машине Mic-2, если эта программа выполняется
на машине Mic-1 за 100 не?
13. На машине JVM существуют специальные 1-байтные коды операций для
загрузки в стек локальных переменных от 0 до 3, которые используются вме-
сто обычной команды IL0AD. Какие изменения нужно внести в машину IJVM,
чтобы наилучшим образом использовать эти команды?
14. Команда ISHR (целочисленный арифметический сдвиг вправо) есть в маши-
не JVM, но ее нет в машине IJVM. Команда берет два верхних слова стека и
заменяет их одним словом (результатом). Второе сверху слово стека — это
операнд, который нужно сдвинуть. Он сдвигается вправо на значение от 0
до 31 включительно, в зависимости от значения пяти самых младших битов
верхнего слова в стеке (остальные 27 битов игнорируются). Знаковый бит
дублируется вправо на столько же битов, на сколько осуществляется сдвиг.
Код операции для команды ISHR 122 (0x7А).
1. Какая арифметическая операция эквивалентна сдвигу вправо на 2?
2. Расширьте систему микрокоманд, чтобы включить эту команду в IJVM.
15. Команда ISHR (целочисленный сдвиг влево) имеется в JVM, но отсутствует
в IJVM. Команда берет два верхних слова стека и замещает их одним значе-
нием (результатом). Второе сверху слово в стеке — операнд, который нужно
сдвинуть. Он сдвигается влево на значение от 0 до 31 включительно, в за-
висимости от значения пяти младших бит верхнего слова в стеке (осталь-
ные 2 бита верхнего слова игнорируются). Нули сдвигаются влево на столько
же битов, на сколько осуществляется сдвиг. Код операции ISHL 120 (0x78).
1. Какая арифметическая операция эквивалентна сдвигу влево на 2?
2. Расширьте систему микрокоманд, чтобы включить эту команду в систе-
му IJVM.
16. Команде INVOKEVIRTUAL в машине JVM нужно знать, сколько у нее парамет-
ров. Зачем?

332 Глава 4. Микроархитектурный уровень
17. Напишите микропрограмму для Mic-1, чтобы реализовать команду JVM
POPTWO. Эта команда убирает два верхних слова из стека.
18. Реализуйте команду JVM DLOAD для Mic-2. Эта команда содержит 1-6айт~
ный индекс и помещает локальную переменную, находящуюся в этом месте,
в стек. Затем она помещает следующее старшее слово в стек.
19. Нарисуйте конечный автомат для учета очков при игре в теннис. Правила
игры в теннис следующие. Чтобы выиграть, вам нужно получить как мини-
мум 4 очка и у вас должно быть как минимум на 2 очка больше, чем у вашего
соперника. Начните с состояния (0, 0), то есть с того, что ни у кого из вас
еще нет очков. Затем добавьте состояние (1,0). Это значит, что игрок Л по-
лучил очко. Дугу из состояния (0,0) к состоянию (1,0) обозначьте буквой
А.
Затем добавьте состояние (0,1), чтобы показать, что игрок Л получил очко,
а дугу к состоянию (0, 1) обозначьте буквой
В,
Продолжайте добавлять со-
стояния и дуги до тех пор, пока не нарисуете все возможные состояния.
20. Вернитесь к предыдущему вопросу. Существуют ли такие состояния, кото-
рые могут выйти из строя, но при этом никак не повлияют на результат лю-
бой игры? Если да, то какие из них эквивалентны?
21. Нарисуйте конечный автомат для прогнозирования ветвления, более надеж-
ный, чем тот, который изображен на рис. 4.29. Он должен изменять предска-
зание только после трех последовательных неудачных предсказаний.
22. Сдвиговый регистр, изображенный на рис. 4.18, имеет максимальную емкость
6 байтов. Можно ли сконструировать более дешевый блок выборки команд
с 5-байтным сдвиговым регистром? А с 4-байтным?
23. Предыдущий вопрос связан с более дешевыми блоками выборки команд.
Теперь рассмотрим более дорогие. Встанет ли когда-нибудь вопрос о том,
чтобы сконструировать сдвиговый регистр гораздо большей емкости, ска-
жем, 12 байтов? Если да, то почему? Если нет, то почему?
24. В микропрограмме для микроархитектуры Mic-2 микрокоманда if_icmpeq6
совершает переход к Т, если Z установлено на 1. Однако микрокоманда Т та
же, что и gotol. А возможно ли перейти к gotol сразу, и станет ли машина
работать быстрее после этого?
25. В микроархитектуре Mic-4 блок декодирования отображает код операции
IJVM в индекс ПЗУ, где хранятся соответствующие микрооперации. Кажет-
ся, что было бы проще опустить стадию декодирования и сразу передать код
операции IJVM в очередь. Тогда можно использовать код операции IJVM
в качестве индекса в ПЗУ, точно так же, как в микроархитектуре Mic-1.
Что не так в этом плане?
26. Компьютер содержит двухуровневую кэш-память. Предположим, что 80%
обращений к памяти — удачные обращения в кэш-память первого уровня,
15% — в кэш-память второго уровня, а 5% — промахи кэша. Время доступа
составляет 5 не, 15 не и 60 не соответственно, причем время доступа в кэш-
память второго уровня и в основную память отсчитывается с того момента,
как стало известно, что они нужны (например, доступ к кэш-памяти второго
уровня не может начаться, пока не произойдет npoMLx кэш-памяти первого
уровня). Каково среднее время доступа?