Статус нашего сайта: |
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Теперь посмотрим на команды 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), поэтому при трансляции на машинный язык не создается никаких ветвлений. Базовые блоки связываются операторами управления. |