Предварительная выборка команд и предсказание переходов

Поскольку при суперскалярной обработке необходимо извлекать из памяти несколько команд за один такт для загрузки параллельно рабо­тающих функциональных модулей, повышенные требования предъявля­ются к пропускной способности интерфейса микропроцессор-память. В со­временных микропроцессорах применяются многоуровневые раздельные кэш-памяти данных и команд.

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

Исполнение условных ветвлений состоит из следующих этапов:

• распознание команды условного ветвления;

• проверка выполнения условия перехода;

• вычисление адреса перехода;

• передача управления, в случае перехода. На каждом этапе используются специальные приемы повышения про­изводительности.

1. Для быстрого декодирования используются либо дополнительные биты в поле команды, либо преддекодирование команд при выборе из кэш-памяти команд.

2. Часто, когда команда уже выбрана в кэш, условие перехода еще не вычислено. Чтобы не задерживать поток команд в данном случае исполь­зуется предсказание перехода по одной из нескольких возможных схем. Некоторые предсказатели используют статическую информацию из дво­ичного кода программы или специально выработанную компилятором. Например, определенные коды операций чаще вырабатывают ветвление, чем другие коды, или ветвление более вероятно (при организации цик­лов), или компилятор может устанавливать флаг, указывающий направ­ления перехода. Может также использоваться статистическая информа­ция, полученная при трассировке программы.

Другие предсказатели используют динамически формируемую инфор­мацию в процессе исполнения программы. Обычно это информация, ка­сающаяся истории выполнения данного ветвления, сохраняемая в табли­це ветвлений или в таблице предсказаний ветвлений. Таблица предсказа­ния ветвлений организуется по ассоциативному принципу, подобно кэш-памяти, ее элементы доступны по адресу команды, ветвление которой пред­сказывается. В некоторых реализациях элемент таблицы предсказания ветв­ления является счетчиком, значение которого увеличивается при правиль­ном предсказании и уменьшается при неправильном. При этом значение счетчика определяет преобладающее направление ветвлений.

В момент определения действительного значения условия ветвления, вно­сится изменение в историю ветвления. Если предсказание было неверным, то должна инициироваться выборка правильных команд. Результаты ко­манд, которые были условно выполнены, должны быть аннулированы.

3. Для определения адреса ветвления обычно требуется выполнить це­лочисленное сложение, прибавляющее к текущему значению счетчика ко­манд смещение, заданное в поле команды ветвления. И хотя это не требует дополнительных циклов для обращения к регистрам, ускорение вычисле­ния адреса может быть достигнуто благодаря использованию буфера, со­держащего ранее использованные адреса переходов.

Если требуется осуществить смену значения счетчика команд, то необ­ходим, по крайней мере, один такт для распознания команды ветвления, модификации счетчика команд и выборки команды по заданному значе­нию счетчика команд. Эти задержки вызывают пустые такты в конвейе­рах процессора. Более сложные решения используют буферы, содержащие наборы команд для двух возможных результатов ветвлений.

Возможно также использование "отложенных переходов", когда одна или несколько команд после команды ветвления выполняются безусловно.