Статус
нашего
сайта:
ICQ Secrets Center is Online  ICQ Information Center


ICQ SHOP
     5-значные
     6-значные
     7-значные
     8-значные
     9-значные
     Rippers List
ОПЛАТА
СТАТЬИ
СЕКРЕТЫ
HELP CENTER
OWNED LIST
РОЗЫСК!New!
ICQ РЕЛИЗЫ
Протоколы ICQ
LOL ;-)
Настройка компьютера
Аватарки
Смайлики
СОФТ
     Mail Checkers
     Bruteforces
     ICQTeam Soft
     8thWonder Soft
     Other Progs
     ICQ Patches
     Miranda ICQ
ФорумАрхив!
ВАШ АККАУНТ
ICQ LiveJournal

Реклама

Наш канал:

irc.icqinfo.ru

Таненбаум Э.- Архитектура компьютера. стр.244


Таненбаум Э.- Архитектура компьютера. стр.244

Теперь посмотрим на команды 6, 7 и 8 в табл. 4.11. Здесь мы видим, что команда 6 помещает вычисленное значение в регистр Ш и это значение используется командой 7.

Таблица 4,12, Работа суперскалярного процессора с изменением очередности запуска и завершения команд

Таненбаум Э.- Архитектура компьютера.

Мы также видим, что это значение больше не требуется, потому что команда 8 переписывает значение регистра R1. Нет никакой надобности использовать регистр R1 для хранения результата команды 6. Еще хуже то, что далеко не лучшим является выбор регистра R1 в качестве промежуточного, хотя, с точки зрения программиста, привыкшего к идее последовательного выполнения команд без перекрытий, этот выбор является самым разумным.

В табл. 4.12 мы ввели новый метод для решения этой проблемы — подмену регистров (register renaming). Блок декодирования заменяет регистр R1 в командах 6 (цикл 3) и 7 (цикл 4) скрытым для программиста регистром S1. После этого команда 6 может запускаться одновременно с командой 5. Современные процессоры содержат десятки скрытых регистров, которые используются для подмены. Такая технология часто позволяет устранить WAR- и WAW-взаимоза-висимости.

В команде 8 мы снова применяем подмену регистров. На этот раз регистр R1 заменяется регистром S2, поэтому операция сложения может начаться до того, как освободится регистр R1, а освободится он только в конце цикла 6. Если окажется, что результат в этот момент должен быть в регистре R1, содержимое регистра S2 всегда можно скопировать туда. Еще лучше то, что все будущие команды, использующие этот результат, смогут в качестве источника задействовать регистр подмены, в котором действительно хранится нужное значение. В любом случае выполнение команды 8 начнется раньше.

В настоящих (не гипотетических) компьютерах подмена регистров происходит с многократным вложением. Существует множество скрытых регистров и таблица, в которой показывается соответствие доступных программисту и скрытых регистров. Например, чтобы найти местоположение регистра R0, нужно обратиться к элементу 0 этой таблицы. На самом деле реального регистра R0 нет, а есть только связь между именем R0 и одним из скрытых регистров. Эта связь часто меняется во время выполнения программы, чтобы избежать взаимозависимостей.

Обратите внимание на четвертый и пятый столбец табл. 4.12. Вы видите, что команды запускаются не по порядку и завершаются также не по порядку. Вывод весьма прост: изменив последовательность выполнения команд и подменив регистры, мы можем ускорить процесс вычислений почти в два раза.

Спекулятивное исполнение

В предыдущем разделе мы ввели понятие переупорядочения команд, необходимого для повышения производительности. В действительности имелось в виду переупорядочение команд в пределах одного базового блока программы. Рассмотрим этот аспект подробнее.

Компьютерные программы можно разбить на базовые блоки, каждый из которых представляет собой линейную последовательность команд с точкой входа в начале и точкой выхода в конце. Базовый блок не содержит никаких управляющих структур (например, условных операторов if или операторов цикла while), поэтому при трансляции на машинный язык не создается никаких ветвлений. Базовые блоки связываются операторами управления.


⇐ Предыдущая страница| |Следующая страница ⇒

.