ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 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 в этом плане вообще не нужно ничего делать, поскольку ее первоначальные ко­манды уже представляют собой микрооперации.



Смотрите также файлы