Разработка микроархитектурного уровня
283
Микрокоманда Операции
Комментарий
widei
widejloadi
widejstorei
tdc_w1
iind
nnc2
нпсЗ
gotoi
goto2
goto3
goto4
rflti
rflt2
iflt3
iflt4
ifeqi
ifeq2
ifeq3
ifeq4
ifjcmpeql
if_icmpeq2
if_icmpeq3
if_icmpeq4
if_icmpeq5
if_icmpeq6
T
F
F2
invoke_virtuaM
invoke_virtua!2
invoke_virtual3
invoke_virtual4
invoke virtual5
goto{MBR1 ИЛИ 0x100)
MAR=LV+MBR2U, rd,
goto iload2
MAR=LV+MBR2U,
goto istore2
MAR=CPP+MBR2U,
rd, goto iload2
MAR=LV+MBR1U,rd
H=MBR1
MDR=MDR+H,wr,
goto(MBRI)
H=PC-1
PC=H+MBR2
goto(MBRI)
MAR=SP=SP-1,rd
OPC=TOS
TOS=MDR
N=OPC,if(N)gotoT,
else goto F
MAR=SP=SP-1,rd
OPC=TOS
TOS=MDR
Z=OPC, if{Z)gotoT;
else goto F
MAR=SP=SP-1,rd
MAR=SP=SP-1
H=MDR, rd
OPC=TOS
TOS=MDR
Z=H-OPC,if(Z)gotoT,
else goto F
H=PC-1,gotogoto2
H=MBR2
goto(MBRI)
MAR=CPP+MBR2U, rd
OPC=PC
PC=MDR
TOS=SP-MBR2U
TOS=MAR=H=TOS+1
Следующий адрес —0x100 ИЛИ код операции
То же, что iloadi, но с использованием 2-байтного
индекса
То же, что istorei, но с использованием 2-байтного
индекса
То же, что widejload 1, но индексирование
осуществляется из регистра СРР
Установка регистра MAR на значение LV+индекс,
чтение этого значения
Присваивание регистру Н константы
Увеличение на константу и обновление
Копирование значения PC в регистр Н
Прибавление смещения и обновление PC
Машина ждет, пока блок выборки команд вызовет
новый код операции
Переход к следующей команде
Чтение второго слерху слова в стеке
Временное сохранение TOS в ОРС
Запись новой вершины стека в TOS
Переход в бит N
Чтение второго сверху слова в стеке
Временное сохранение TOS в ОРС
Запись новой вершины стека в TOS
Переход в бит Z
Чтение второго сверху слова в стеке
Установка регистра MAR на чтение новой вершины
стека
Копирование второго слова из стека в регистр Н
Временное сохранение TOS в ОРС
Помещение новой вершины стека в TOS
Если два верхних слова равны, осуществляется
переход к Т, если они не равны, осуществляется
переход к F
Тоже, чтодоШ!
Игнорирование байтов, находящихся в регистре MBR2
Помещение адреса указателя процедуры
в регистр MAR
Сохранение значения PC в регистре ОРС
Установка PC на первый байт кода процедуры
TOS = адрес OBJREF-1
TOS = адрес OBJREF
продочжение^
284
Глава 4. Микроархитектурный уровень
Таблица 4.9
(продолжение)
Микрокоманда Операции
Комментарий
invoke_virtual6
invoke_virtual7
invoke_virtual8
invoke virtua!9
MDR=SP+MBR2U+1;wr
MAR=SP=MDR
MDR-OPC; wr
MAR=SP=SP+1
invoke_virtual10 MDR=LV; wr
invoke_virtual11 LV=TOS; goto (MBR1)
ireturni MAR=SP=LV;rd
ireturn2
ireturn3
ireturn4
ireturn5
ireturn6
ireturn7
ireturn8
LV=MAR=MDR; rd
MAR=LV+1
PC-MDR; rd
MAR=SP
LV=MDR
MDR-TOS; wr;
goto(MBRI)
Перезапись OBJREF со связующим указателем
Установка регистров SP и MAR на адрес ячейки,
в которой содержится старое значение PC
Подготовка к сохранению старого значения PC
Увеличение SP на 1; теперь SP указывает на ячейку,
в которой хранится старое значение LV
Сохранение старого значения LV
Установка значения LV на нулевой параметр
Переустановка регистров SP и MAR для чтения
связующего указателя
Процесс считывания связующего указателя
Установка регистров LV и MAR на связующий
указатель; чтение старого значения PC
Установка регистра MAR на старое значение LV;
чтение старого значения LV
Восстановление PC
Восстановление LV
Сохранение результата в изначальной вершине стека
Микроархитектура Mic-2 совершенствует некоторые команды в большей сте-
пени, чем другие. Команда LDC_W сокращается с 9 до 3 микрокоманд, и следова-
тельно, время выполнение команды уменьшается в три раза. Несколько по-друго-
му дело обстоит с командой SWAP: изначально там было 8 команд, а стало 6. Для
общей производительности компьютера играет роль сокращение наиболее часто
повторяющихся команд. Это команды ILOAD (было 6, сейчас 3), IADD (было 4, сейчас
3) и IFJCMPEQ (было 13, сейчас 10 для случая, если слова равны; было 10, сейчас 8
для случая, если слова не равны). Чтобы вычислить, насколько улучшилась про-
изводительность, можно проверить эффективность системы по эталонному тесту,
но и без этого ясно, что здесь наблюдается огромный выигрыш в скорости.
Конвейерная архитектура: Mic-3
Ясно, что Mic-2 — это усовершенствованная микроархитектура Mic-1. Она рабо-
тает быстрее и использует меньше управляющей памяти, хотя стоимость блока
выборки команд, несомненно, превышает ту сумму, которая выигрывается за счет
сокращения пространства при уменьшении управляющей памяти. Таким образом,
машина Mic-2 работает значительно быстрее при минимальном росте стоимости.
Давайте посмотрим, можно ли еще больше повысить скорость.
А что, если попробовать уменьшить время цикла? В значительной степени вре-
мя цикла определяется базовой технологией. Чем меньше транзисторы и чем мень-
ше физическое расстояние между ними, тем быстрее может работать задающий
генератор. Б технологии, которую мы рассматриваем, время, затрачиваемое на
Разработка микроархитектурного уровня 285
прохождение через тракт данных, фиксировано (по крайней мере, с нашей точки
зрения). Тем не менее у нас есть некоторая свобода действий, и далее мы использу-
ем ее в полной мере.
Еще один вариант усовершенствования — ввести в машину больше паралле-
лизма. В данный момент микроархитектура Mic-2 выполняет большинство опера-
ций последовательно. Она помещает значения регистров на шины, ждет, пока АЛ У
и схема сдвига обработают их, а затем записывает результаты обратно в регистры.
Если не учитывать работу блока выборки команд, никакого параллелизма здесь
нет. Внедрение дополнительных средств параллельной обработки дает нам боль-
шие возможности.
Как мы уже говорили, длительность цикла определяется временем, необходи-
мым для прохождения сигнала через тракт данных. На рис. 4.2 показано распреде-
ление этой задержки между различными компонентами во время каждого цикла.
В цикле тракта данных есть три основных компонента:
1. Время, которое требуется на передачу значений выбранных регистров в шины
А и В.
2. Время, которое требуется на работу АЛУ и схемы сдвига.
3. Время, которое требуется на передачу полученных значений обратно в ре-
гистры и сохранение этих значений.
На рис. 4.21 показана новая трехшинная архитектура с блоком выборки команд
и тремя дополнительными защелками (регистрами), каждая из которых распо-
ложена в середине каждой шины. Эти регистры записываются в каждом цикле.
Они делят тракт данных на отдельные части, которые теперь могут функциони-
ровать независимо друг от друга. Мы будем называть такую архитектуру
конвей-
ерной моделью
или
Mic-3.
Зачем нужны эти три дополнительных регистра? Ведь теперь для прохожде-
ния сигнала через тракт данных требуется три цикла: один — для загрузки регистров
А и В, второй — для запуска АЛУ и схемы сдвига и загрузки регистра С, и третий —
для сохранения значения регистра-защелки С обратно в нужные регистры. Мы что,
сумасшедшие?
(Подсказка:
нет). Существует целых две причины введения допол-
нительных регистров:
1. Мы можем повысить тактовую частоту, поскольку максимальная задержка
теперь стала короче.
2. Во время каждого цикла мы можем использовать все части тракта данных.
После разбиения тракта данных на три части максимальная задержка прохож-
дения сигнала уменьшается, и в результате тактовая частота может повыситься.
Предположим, что если разбить цикл тракта данных на три примерно равных ин-
тервала, тактовая частота увеличится втрое. (На самом деле это не так, поскольку
мы добавили в тракт данных еще два регистра, но в качестве первого приближения
это допустимо.)
Поскольку мы предполагаем, что все операции чтения из памяти и записи в
память выполняются с использованием кэш-памяти первого уровня и эта кэш-
память построена из того же материала, что и регистры, то следовательно, опе-
рация с памятью занимает один цикл. На практике, однако, этого не так легко
достичь.
286
Глава 4 Микроархитектурный уровень
Регистры
управления
памятью
Сигналы управления
А Разрешающий сигнал
' на шину В
А Запись сигнала
' с шины С в регистр
Шина С
Шина В
Защелка С
Управление
АЛУ
— и Схема сдвигам—
I
Рис. 4 . 2 1 ,
Тракт данных с тремя шинами в микроархитектуре Mic-3
Второй пункт связан с общей производительностью, а не со скоростью выпол-
нения отдельной команды В микроархитектуре Mic-2 во время первой и третьей
части каждого цикла АЛУ простаивает Если разделить тракт данных на три час-
ти, то появляется возможность использовать АЛУ в каждом цикле, вследствие чего
производительность машины увеличивается в три раза
А теперь посмотрим, как работает тракт данных Mic-З. Перед тем как начать,
нужно ввести определенные обозначения для защелок Проще всего назвать за-
Разработка микроархитектурного уровня
287
щелки А, В и С и считать их регистрами, подразумевая ограничения тракта дан-
ных. В таблице 4.10 приведен кусок программы для микроархитектуры Mic-2 (ре-
ализация команды SWAP).
Таблица 4.10.
Программа Mic-2 для команды SWAP
Микрокоманда Операции
Комментарий
swapi
swap2
swap3
swap4
swap 5
swap6
MAR=SP-1;rd
MAR=SP
H=MDR;wr
MDR=TOS
MAR=SP-1;wr
TOS=H;goto(IV
Чтение второго слова из стека; установка MAR на SP
Подготовка к записи нового второго слова
Сохранение нового значения TOS; запись второго
слова в стек
Копирование старого значения TOS в регистр MDR
Запись старого значения TOS на второе место в стеке
Давайте перепишем эту последовательность для Mic-З. Следует помнить, что
теперь работа тракта данных занимает три цикла: один — для загрузки регистров А
и В, второй — для выполнения операции и загрузки регистра С и третий — для запи-
си результатов в регистры. Каждый из этих участков будем называть
микрошагом.
Реализация команды SWAP для Mic-З показана в табл. 4.11. В цикле 1 мы начи-
наем микрокоманду swapl, копируя значение SP в регистр В. Не имеет никакого
значения, что происходит в регистре А, поскольку чтобы отнять 1 из В, ENA (сиг-
нал разрешения А) блокируется (см. табл. 4.1). Для простоты мы не показываем
присваивания, которые не используются. В цикле 2 мы производим операцию вы-
читания. В цикле 3 результат сохраняется в регистре MAR, и после этого, в конце
третьего цикла, начинается процесс чтения. Поскольку чтение из памяти занимает
один цикл, закончится он только в конце четвертого цикла. Это показано присваи-
ванием значения регистру MDR в цикле 4. Значение из MDR можно считывать не
раньше пятого цикла.
Таблица 4 . 1 1 .
Реализация команды SWAP для Mic-З
Цикл
1
2
3
4
5
6
7
8
9
10
11
Swapl
MAR=SP-1;rd
B=SP
С=В-1
MAR=C; rd
MDR=Mem
Swap2
MAR=SP
B=SP
C=B
MAR=C
Swap3
H=MDR,wr
B=MDR
C=B
H=C; wr
Mem=MDR
Swap4
MDR-TOS
B=TOS
C=B
MDR=C
Swap5
MAR-SP-1 ;wr
B=SP
C=B-1
MAR=C; wr
Mem=MDR
Swap6
TOS=H;goto(MBR1)
B=H
C=B
TOS-C
goto(MBRI)