logo
Intel_Corei_Lections_2012

Предсказание ветвлений

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

Intel не обеспечила деталей по поводу алгоритма, используемого в новых блоках предсказания ветвлений, но широко известно, что теперь есть два уровня предсказаний. Первый уровень не изменился с архитектуры Conroe, но был добавлен новый уровень с медленным доступом, который позволяет хранить большую историю ветвлений. По информации Intel, эта конфигурация улучшает предсказание ветвлений в некоторых приложениях, которые используют массивные участки кода, таких как базы данных. Другое улучшение касается Return Stack Buffer, который хранит адрес возврата функций, когда они вызываются. В некоторых случаях этот буфер может переполняться, что приводит к ошибочным предсказаниям. Чтобы ограничить такую возможность, AMD увеличила его размер до 24 записей, а в Nehalem появилась система переименования для этого буфера.