Статус
нашего
сайта:
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

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


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

Однако при наличии спекулятивных команд возникает еще одна проблема, которую нельзя решить путем подмены регистров. Что произойдет, если спекулятивная команда вызовет исключение? В качестве примера можно привести команду LOAD, которая вызывает кэш-промах в компьютере со строкой кэша достаточно большого размера (скажем, 256 байт) и памятью, которая работает гораздо медленнее, чем центральный процессор и кэш. Если нам требуется команда LOAD и работа машины останавливается на несколько циклов, пока загружается строка кэша, то это не так страшно, поскольку данное слово действительно нужно. Но если машина простаивает, чтобы вызвать слово, которое, как окажется позднее, нам ни к чему, это совершенно нерационально. Если подобных «оптимизаций» слишком много, то центральный процессор будет работать медленнее, чем если бы «оптимизаций» вообще не было. (Если машина содержит виртуальную память, о которой рассказывается в главе 6, то спекулятивное выполнение команды LOAD может даже вызвать обращение к отсутствующей странице. Подобные ошибки могут значительно повлиять на производительность, поэтому важно их избегать.)

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

Более сложную ситуацию можно проиллюстрировать следующим оператором:

if (х > 0) z = у/х;

Здесь х, у и z — переменные с плавающей точкой. Предположим, что все эти переменные поступают в регистры заранее, а команда деления с плавающей точкой (эта команда выполняется медленно) перемещается вверх по графу и выполняется еще до условного оператора if. К сожалению, если значение х равно 0, то программа завершается в результате попытки деления на 0. Таким образом, спекулятивная команда приводит к сбою в изначально правильной программе. Еще хуже то, что программист изменяет программу, чтобы предотвратить подобную ситуацию, но сбой все равно происходит.

Одно из возможных решений — специальные версии тех команд, которые могут вызывать исключения. Кроме того, к каждому регистру добавляется так называемый бит отравления (poison bit). Если спекулятивная команда дает сбой, она не инициирует перехват исключения, а устанавливает бит отравления в регистр результатов. Если затем этот регистр используется обычной командой, выполняется перехват исключения (как и должно быть в случае исключения). Однако если этот результат не используется, бит отравления сбрасывается и никак не влияет на ход выполнения программы.

Примеры уровня микроархитектуры

В этом разделе в свете материала, изучаемого в этой главе, мы рассмотрим три современных процессора. Наше изложение будет кратким, поскольку компьютеры чрезвычайно сложны, содержат миллионы вентилей и у нас нет возможности давать подробное описание. Процессоры, предлагаемые в качестве примеров, те же, что и раньше, — Pentium 4, UltraSPARC III и 8051.


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

.