ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 13.01.2021
Просмотров: 138
Скачиваний: 1
Если, например, стек операндов состоит из двух слов, то в регистровом файле могут находиться до 62 слов локальных переменных. При помещении дополнительного слова в стек или его выталкивании может возникать дриблинг. Если в стек, например, помещается 63-я локальная переменная, то самая глубокая из них выгружается обратно в память. Если, наоборот, в регистровом файле освобождается место, то в него перезагружаются слова из глубины стековой памяти. Специальные регистры на микросхеме определяют, насколько полным должен быть регистр, чтобы слова из нижней части стека записывались в память, и насколько пустым он может быть для того, чтобы перезагрузить регистровый файл из памяти. Для облегчения дриблинга регистровый файл действует как кольцевой буфер с указателями на самое нижнее и на самое верхнее слова. Дриблинг происходит автоматически всякий раз, когда регистровый файл переполняется или пустеет.
Конвейер системы picoJava II состоит из шести стадий. На первой стадии из кэш-памяти команд в буфер команд выбираются команды по 8 байтов за одно обращение. Емкость буфера команд составляет 16 байтов. На следующей стадии команды декодируются и определенным образом объединяются. На выходе из блока декодирования получается последовательность микроопераций, каждая из которых содержит код операции и три номера регистров (двух входных и одного выходного). В этом отношении машина picoJava II сходна с Pentium II: обе получают поток CISC-команд, который преобразуется в последовательность RISC-микроопераций. В отличие от Pentium II, машина picoJava II не является суперскалярной, и микрооперации выполняются и завершаются в том порядке, в котором они запускаются. В случае промаха кэш-памяти процессор простаивает.
На третьей стадии операнды выбираются из стека (фактически из регистрового файла). Четвертая стадия - это блок выполнения команд. На пятой стадии в случае необходимости производится обращение к кэш-памяти данных (например, чтобы сохранить там результаты). Наконец, на шестой стадии результаты записываются обратно в стек.
Блок декодирования умеет свертывать команды. Чтобы это объяснить, рассмотрим выражение n = k + m. Предполагается, что k, m и n - локальные переменные, занимающие в стеке позиции 7, 1 и 3 соответственно. Его трансляция на JVM может быть следующей:
ILOAD 7 ; Поместить в вершину стека k
ILOAD 1 ; Поместить в вершину стека m
IADD ; Заменить две верхние переменные суммой
ISTORE 3 ; Вытолкнуть и записать на место n
Если при выполнении все три переменные будут находиться достаточно высоко в стеке, чтобы располагаться в регистровом файле, то для выполнения этой последовательности команд вообще не потребуются обращения к памяти. Избавление от обращений к памяти - основной способ повышения производительности. Однако машина picoJava II делает больше. Рассматриваемая последовательность четырех команд просто складывает два регистра и сохраняет полученное значение в третьем регистре. Блок декодирования распознает эту ситуацию и запускает лишь одну микрооперацию: трехрегистровую команду ADD. Таким образом, вместо четырех CISC-команд JVM, для которых может потребоваться несколько обращений к памяти, мы имеем одну RISC-микрооперацию сложения. Этот процесс называется свертыванием команд.
Процесс свертывания происходит только тогда, когда требуемые локальные переменные находятся достаточно близко от вершины стека, то есть содержатся в регистровом файле. Тем не менее свертывание команд происходит довольно часто. Измерения показывают, что picoJava II может выполнять программы на языке Java в 5 раз быстрее, чем если те же программы скомпилировать на машинный язык для Pentium с аналогичной тактовой частотой, и в 15 раз быстрее, чем при интерпретируемом выполнении той же программы на машине Pentium.
В машине picoJava II используется примитивное прогнозирование ветвлений: она всегда предсказывает, что перехода не будет. Это объясняется намерением сохранить микросхему простой и дешевой. Однако благодаря более короткому конвейеру (6 стадий вместо 12, как в системе Pentium II) проигрыш при неправильном предсказании оказывается менее существенным (около 3-х циклов).
4.4.4. Сравнение рассмотренных архитектур
Несмотря на большие различия, микроархитектуры всех трех машин имеют сходные функциональные блоки. Кроме того, их микрооперации имеют одинаковую структуру - содержат код операции, два входных регистра и один выходной регистр. Все машины могут выполнять микрооперацию за один цикл, конвейеризированы и применяют прогнозирование ветвления. Все они содержат разделенную кэш-память для команд и для данных, объем каждой составляет 16 Кбайт. Внутреннее сходство говорит о том, что для современной техники эти общие идеи наиболее эффективны.
Главное различие между рассмотренными процессорами составляет переход от команд к микрокомандам. Компьютеру Pentium II приходится разбивать CISC-команды, чтобы преобразовать их в трехрегистровый формат, необходимый для функционального блока. У машины picoJava II обратная основная задача - скомбинировать несколько команд для получения микрооперации (свертывание). Машине UltraSPARC II в этом плане вообще не нужно ничего делать, поскольку ее первоначальные команды уже представляют собой микрооперации.