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. Напишите моделирующую программу для одновходовой кэш-памяти прямого отображения. Сделайте число элементов и длину строки параметрами программы. Поэкспериментируйте с этой программой и представьте полученные результаты.
Глава 5
Уровень архитектуры набора команд
В этой главе подробно обсуждается уровень архитектуры набора команд (ISA). Как показано на рис. 1.2, он расположен между уровнями микроархитектуры и операционной системы. Исторически этот уровень развился прежде всех остальных уровней и изначально был единственным. В наши дни этот уровень очень часто называют «архитектурой» машины, а иногда (что неправильно) — «языком ассемблера».
Уровень архитектуры набора команд имеет особое значение: он является связующим звеном между программным и аппаратным обеспечением. Конечно, можно было бы сделать так, чтобы аппаратное обеспечение непосредственно выполняло программы, написанные на С, С++, Java или других языках высокого уровня, но это не очень хорошая идея. Преимущество компиляции перед интерпретацией было бы тогда потеряно. Кроме того, из чисто практических соображений компьютеры должны уметь выполнять программы, написанные на разных языках, а не только на одном.
В сущности, все разработчики считают, что нужно транслировать программы, написанные на различных языках высокого уровня, в некую общую для всех промежуточную форму — уровень архитектуры набора команд — и, соответственно, строить аппаратное обеспечение, которое сможет непосредственно выполнять программы этого уровня. Уровень архитектуры набора команд связывает компиляторы и аппаратное обеспечение. Это язык, который понятен и компиляторам, и устройствам. На рис. 5.1 показана взаимосвязь компиляторов, уровня архитектуры набора команд и аппаратного обеспечения.