Современные процессоры прекрасно работают с опережением команд, выполняющихся в текущий момент времени. Они считывают новые команды из памяти и декодируют их для определения предназначенных для выполнения операций и необходимых для этого операндов.
Конвейерная обработка команд работает адекватно, пока команды придерживаются простой последовательности. Однако при столкновении с ветвью процессор должен «угадать» ее направление. Для случая с условным переходом это означает прогнозирование того, будет ветвь выбрана или нет. Для таких команд, как команда косвенного перехода или команда возврата процедуры, это означает прогнозирование целевого адреса.
АЦП, общие сведения:
В процессоре, где применяется предположительное выполнение, команды начинают выполняться на спрогнозированной ветви. Это происходит так, что ни один фактический регистр или ячейка памяти не модифицируются до определения фактического выхода. Если прогноз корректен, процессор просто «передает» результаты предположительно выполненных команд путем сохранения их в регистрах или в памяти.
Если прогноз некорректен, тогда процессор должен отбросить все предположительно выполненные результаты и перезапустить процесс выборки команд с корректного местоположения. При этом налагается значительный штраф ветви, потому что конвейер команд должен быть повторно наполнен до того, как будут сгенерированы полезные результаты.
До недавнего времени технология, необходимая для поддержки предположительного выполнения, считалась весьма дорогостоящей и экзотической для любых машин, кроме промышленных суперкомпьютеров.
Применение ЦАП, генерация сигналов:
Однако, где-то в 1998 г. технология интегральных схем позволила представить на одной микросхеме настолько большое количество различных цепей, что некоторые микросхемы стало возможно использовать для поддержки процессов прогнозирования ветвей и предположительного выполнения.
С этого времени практически любой процессор настольной рабочей станции или сервера поддерживает предположительное выполнение.
При оптимизации комбинирующей процедуры ограничения производительности, вызванные циклической структурой, не рассматривались. То есть, оказалось, что единственный фактор, сдерживающий производительность, связан с функциональными устройствами.
Для этой процедуры процессор, как правило, мог спрогнозировать направление ветви в конце цикла. На самом деле, если сделан прогноз, что ветвь всегда будет выбрана, тогда процессор будет работать корректно всегда, кроме последней итерации.
Как течёт ток в схеме:
Для прогнозирования ветвей разработано множество схем, и их производительность тщательно изучена. Общей эвристикой является прогноз, что любая ветвь на более младший адрес будет выбрана, а любая ветвь на более старший адрес выбрана не будет.
Ветви на младшие адреса используются для закрытия циклов, а поскольку циклы, как правило, выполняются многократно, то хорошей идеей является прогнозирование этих ветвей как выбранных. С другой стороны, ветви с переходом вперед используются для условных вычислений. Экспериментально доказано, что эвристика BTFNT корректна приблизительно 65% времени.
Однако прогнозирование всех ветвей как выбранных имеет долю успешных попыток в 60%. Были разработаны намного более сложные стратегии, требующие большего количества аппаратных средств.