Реклама:

1. На рис. 4.5 регистр шины В кодируется через 4-разрядное поле, а шина С представлена в виде битового отображения. Почему?

2. На рис. 4.5 есть блок "Старший бит". Нарисуйте его схему.

3. Когда в микрокоманде установлено поле ]МРС, регистр MBR соединяется операцией ИЛИ с полем NEXT_ADDRESS, чтобы получить адрес следующей микрокоманды. Существуют ли такие обстоятельства, при которых имеет смысл использовать поле JMPC, если в NEXT_ADDRESS находится значение 0x1FF?

4. Предположим, что в листинге 4.1 после оператора if имеется следующий оператор:

к = 5;

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

5. Напишите два разных варианта трансляции для IJVM следующего оператора на языке Java:

i = k + л + 5;

6. Напишите на языке Java оператор, ставший источником следующего кода для IJVM:

IL0AD j IL0AD к ISUB

BIPUSH б ISUB DUP IADD ISTORE i

7. В этой главе мы упомянули, что при трансляции показанного ниже оператора в двоичную форму метка L2 должна находиться среди младших 256 слов управляющей памяти:

if (Z) goto LI; else goto L2

А может ли метка LI находиться, скажем, в ячейке с адресом 0x40, a L2 - в ячейке с адресом 0x140? Объясните, почему.

8. В микрокоманде if_cmpeq3 микропрограммы для Mic-1 значение регистра MDR копируется в регистр Н, а в следующей строке от него отнимается значение регистра TOS. Казалось бы, это удобнее записать в одном операторе:

i f_cmpeq3 Z=MDR-T0S; rd Почему этого не делают?

9. Сколько времени потребуется машине Mic-1, которая работает на частоте 2,5 ГГц, на выполнение следующего Java-оператора:

1 - j + к;

Ответ дайте в наносекундах.

10. Аналогичный вопрос только уже для машины Mic-2, тоже работающей на частоте 2,5 ГГц. Опираясь на полученный результат, ответьте, сколько времени займет выполнение программы на машине Mic-2, если эта программа выполняется на машине Mic-1 за 100 не?

И. Напишите микропрограмму для Mic-1, чтобы реализовать JVM-команду P0PTW0. Эта команда удаляет два верхних слова из стека.

12. На машине JVM существуют специальные однобайтные коды операций для загрузки в стек локальных переменных от 0 до 3, которые используются вместо обычной команды IL0AD. Какие изменения нужно внести в машину IJVM, чтобы наилучшим образом использовать эти команды?

13. Команда ISHR (целочисленный арифметический сдвиг вправо) поддерживается в JVM, но не поддерживается в IJVM. Команда извлекает два верхних слова из стека и заменяет их одним словом (результатом). Второе сверху слово стека - это сдвигаемый операнд. Он сдвигается вправо на значение от 0 до 31 включительно, в зависимости от значения пяти самых младших битов верхнего слова в стеке (остальные 27 бит игнорируются). Знаковый бит дублируется вправо на столько же битов, на сколько осуществляется сдвиг. Код операции для команды ISHR равен 122 (0x7А).

14. Команда ISHL (целочисленный сдвиг влево) поддерживается в JVM, но не поддерживается в IJVM. Команда извлекает два верхних слова из стека и заменяет их одним значением (результатом). Второе сверху слово в стеке - сдвигаемый операнд. Он сдвигается влево на значение от 0 до 31 включительно, в зависимости от значения пяти младших битов верхнего слова в стеке (остальные 2 бит верхнего слова игнорируются). Нули сдвигаются влево на столько же битов, на сколько осуществляется сдвиг. Код операции ISHL равен 120 (0x78).

15. JVM-команде INVOKE VIRTUAL нужно знать, сколько у нее параметров. Зачем?

16. Реализуйте JVM-команду DL0AD для Mic-2. Эта команда содержит однобайтный индекс и помещает локальную переменную, находящуюся в этом месте, в стек. Затем она помещает следующее старшее слово в стек.

17. Нарисуйте конечный автомат для учета очков при игре в теннис. Правила игры в теннис следующие. Чтобы выиграть, вам нужно получить как минимум 4 очка и у вас должно быть как минимум на 2 очка больше, чем у вашего соперника. Начните с состояния (0, 0), то есть с того, что ни у кого из вас еще нет очков. Затем добавьте состояние (1,0), означающее, что игрок А получил очко. Ребро от состояния (0, 0) к состоянию (1,0) обозначьте буквой А. Затем добавьте состояние (0, 1), чтобы показать, что игрок В получил очко, а ребро к состоянию (0, 1) обозначьте буквой В. Продолжайте добавлять состояния и ребра до тех пор, пока не нарисуете все возможные состояния.

18. Вернитесь к предыдущему вопросу. Существуют ли такие состояния, которые можно безболезненно удалить, никак не повлияв на результат любой игры? Если да, то какие из них эквивалентны?

19. Нарисуйте конечный автомат для прогнозирования ветвлений, более надежный, чем тот, который изображен на рис. 4.29. Он должен изменять прогноз только после трех последовательных неудачных прогнозов.

20. Сдвиговый регистр, изображенный на рис. 4.18, имеет максимальную емкость 6 байт. Можно ли сконструировать блок выборки команд с 5-байтным сдвиговым регистром? А с 4-байтным?

21. Предыдущий вопрос связан с удешевлением блока выборки команд. Теперь рассмотрим вопрос его удорожания. Может ли когда-нибудь понадобиться сдвиговый регистр большей емкости, скажем, на 12 байт? Если да, то почему? Если нет, то почему?

22. В микропрограмме для микроархитектуры Мю-2 микрокоманда п'Мстредб выполняет переход к Т, если бит 2 установлен в 1. Однако микрокоманда Т та же, что и для дот.о1. А можно ли перейти к дот.о1 сразу, и станет ли машина работать быстрее после этого?

23. В микроархитектуре Мк>4 блок декодирования отображает ЦУМ-код операции в индекс ПЗУ, где хранятся соответствующие микрооперации. Кажется, что было бы проще опустить ступень декодирования и сразу передать ЦУМ-код операции в очередь. Тогда можно использовать ЦУМ-код операции в качестве индекса в ПЗУ микроопераций, точно так же, как в микроархитектуре М1с-1. Что не так в этом плане?

24. Компьютер содержит двухуровневую кэш-память. Предположим, что 60 % обращений к памяти - это кэш-попадания в кэш-память первого уровня, 35 % - в кэш-память второго уровня, а 5 % - это кэш-промахи. Время доступа составляет 5, 15 и 60 не соответственно, причем время доступа в кэш-память второго уровня и в основную память отсчитывается с того момента, как становится известно, что соответствующая память нужна (например, доступ к кэш-памяти второго уровня не может начаться, пока не произойдет кэш-промах при поиске в кэш-памяти первого уровня). Каково среднее время доступа?

25. В конце подраздела "Кэш-память" в разделе "Повышение производительности" было отмечено, что заполнение по записи выгодно только в том случае, если имеют место повторные записи в одну и ту же строку кэша. А если после записи следуют многочисленные считывания из одной и той же строки? Будет ли полезным заполнение по записи в этом случае?

26. В черновом варианте этой книги на рис. 4.27 вместо 4-входовой ассоциативной кэш-памяти была изображена 3-входовая ассоциативная кэш-память. Один из рецензентов заявил, что читателей это может смутить, поскольку 3 - это не степень двойки, а компьютеры все делают в двоичной системе. Поскольку потребитель всегда прав, рисунок изменили на 4-входовую ассоциативную кэш-память. Был ли рецензент прав? Аргументируйте.

27. Компьютер с пятиступенчатым конвейером после обработки условного перехода простаивает следующие три цикла. Насколько этот простой снизит производительность, если 20 % команд являются командами условного перехода? Другие причины простоя не учитывайте.

28. Предположим, что компьютер вызывает до 20 команд заранее. В среднем 4 из этих них являются командами условного перехода, причем вероятность правильного прогноза каждого составляет 90 %. Какова вероятность, что предварительно вызванная команда находится на одном из правильных путей?

29. Предположим, что нам пришлось изменить структуру машины, представленную с помощью табл. 4.11, чтобы использовать 16 регистров вместо 8. Тогда мы изменим команду 6, чтобы регистр 118 стал целевым. Что в этом случае будет происходить в циклах, начиная с цикла 6?

30. Обычно взаимозависимости затрудняют работу конвейеризированных процессоров. Можно ли что-нибудь сделать с ДУАДУ-взаимозависимостыо, чтобы улучшить положение вещей? Какие существуют средства оптимизации?

31. Перепишите интерпретатор Мк>1 таким образом, чтобы регистр ЬУ указывал на первую локальную переменную, а не на связующий указатель.

32. Напишите моделирующую программу для одновходовой кэш-памяти прямого отображения. Сделайте число элементов и длину строки параметрами программы. Поэкспериментируйте с этой программой и представьте полученные результаты.

Краткое содержание главы4 || Оглавление || Глава 5. Уровень архитектуры набора команд