Методы ускорения выборки команд при условном переходе

Для ускорения процесса выборки команд применяются следующие методы:

1) вычисление исполнительного адреса перехода на этапе декодирования команды;

2) использование буфера адресов перехода;

3) использование кэш-памяти для хранения команд, расположенных в точке перехода;

4) использование буфера циклов.

На этапе декодирования команды выясняются ее принадлежность к команде перехода, а также способ адресации и адресный код точки перехода. Это позволяет сразу на втором этапе приступить к вычислению исполнительного адреса, не дожидаясь передачи команды на третью ступень, где обычно происходит вычисление адресов. Для этого в состав ступени декодирования вводят дополнительные сумматоры, с помощью которых и вычисляется исполнительный адрес точки перехода, т.е. адрес j-ой команды на правой ветке. Этот метод позволяет незначительно сократить потери времени всего на один такт.

Более существенно сократить потери времени на вычисление исполнительного адреса команды перехода можно за счет использования буфера адресов переходаВТВ. ВТВ от слов Branch Target Buffer.

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

Усовершенствованным вариантом ВТВ является BTIC (Branch Target Instruction Cache). В BTIC помимо исполнительного адреса команды в точке перехода записывается также и код самой команды. Это позволяет при повторном исполнении этой команды выбирать команду не из памяти, а непосредственно из BTIC, что дает наилучший эффект для циклических программ.

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