Очередь инструкций процессоров Intel обеспечивает статический прогноз ветвления?

В томе 3 Руководства Intel содержится описание счетчика аппаратных событий:

BACLEAR_FORCE_IQ

Подсчитывает количество раз, когда BACLEAR был вызван в очереди команд. IQ также отвечает за обеспечение направления прогнозирования условного перехода на основе статической схемы и динамических данных, предоставляемых модулем прогнозирования перехода L2. Если условная цель ветвления не найдена в массиве целей, и IQ предсказывает, что ветвление занято, то IQ заставит калькулятор адресов ветвей выдать BACLEAR. Каждый BACLEAR, утвержденный BAC, генерирует приблизительно 8 циклов пузырька в конвейере выборки команд.

Я всегда думал, что Калькулятор адреса ветвления выполняет алгоритм статического предсказания (когда целевой буфер ветвления не содержит записи ветвления)?

Кто-нибудь может подтвердить, что из вышеперечисленных является правильным? Я не могу ничего найти.

2 ответа

Да. Современные процессоры Intel используют по крайней мере один метод статического прогнозирования и по крайней мере один метод динамического прогнозирования (такой как BPU L2, упомянутый в описании события производительности). Статическое прогнозирование обсуждается в руководстве по оптимизации Intel, но в нем неясно, где именно происходит статическое прогнозирование. Тем не менее, описание нескольких событий производительности, связанных с предсказанием ветвления, таких как BACLEAR_FORCE_IQ, укажите, что это реализовано в блоке IQ. Я думаю, что именно здесь статическое предсказание ветвлений имеет больше смысла.

Сначала BPU определяет, где, скорее всего, команды ветвления находятся в (должны быть) выбранных байтах потока команд (32 байта за цикл в Haswell, в два раза больше ширины единицы выборки). Затем на основе адреса (адресов) виртуальной команды команды (команд), которые предсказаны как инструкция (и) управления передачей, BPU обращается к своим буферам (в частности, "целевой буфер ветвления" или "целевой массив").), чтобы сделать больше предсказаний относительно предсказанных ветвей (направление и целевой адрес). Тем не менее, в некоторых случаях BPU пропускает свои буферы, или он может неправильно прогнозировать расположение (я) команды (й) ветвления в байтах потока команд, или может быть больше ветвей, чем может обработать BPU. Как бы то ни было, какой бы ни был прогноз, все они передаются с байтами потока команд в блок очереди команд. Это самое раннее место в конвейере, где известно, где каждая инструкция начинается и заканчивается и какая из команд может передавать управление.

IQ также отвечает за обеспечение направления прогнозирования условного перехода на основе статической схемы и динамических данных, предоставляемых модулем прогнозирования перехода L2.

Эта часть описания события должна иметь смысл для вас сейчас. Обратите внимание, что статическое предсказание ветвления в основном используется только для предсказания направлений, а не целевых адресов.

Если условная цель ветвления не найдена в массиве целей, и IQ предсказывает, что ветвление занято...

Простой статический предсказатель ветвления используется только тогда, когда BPU не может сделать прогноз. Так что первая часть условия имеет смысл. Вторая часть, однако, в основном говорит, что если IQ предсказывает, что не принято, то ничего не нужно делать. Это указывает на то, что модуль выборки по умолчанию продолжит извлекать код из резервного пути при сбое BPU.

... тогда IQ заставит калькулятор адресов филиалов выдавать BACLEAR

Так что если статический предиктор предсказывает принятые данные, то лучше с этим что-то сделать. Одна интуитивно понятная вещь - сбросить все выше IQ и сказать блоку выборки прекратить выборку байтов. Это то, что делает сигнал BACLEAR. Эта ситуация называется внешним интерфейсом. Было бы неплохо, если бы мы могли сообщить блоку выборки, откуда также получать данные, но мы еще не знаем целевой адрес ветви. Даже если адрес встроен в инструкцию (как непосредственный операнд), IQ может не заключаться в том, чтобы просто извлечь его и переслать в модуль выборки. Мы можем просто ничего не делать и ждать, пока адрес не будет рассчитан, тем самым потенциально экономя энергию и энергию. Или мы можем предоставить BPU адрес (теперь, когда мы точно знаем, где находится инструкция перехода), и позволить BPU повторить попытку. Возможно, целью "Калькулятора адресов филиалов" является не только посылать сигнал BACLEAR, но и пытаться определить адрес как можно раньше.

Каждый BACLEAR, утвержденный BAC, генерирует приблизительно 8 циклов пузырька в конвейере выборки команд.

Мне не ясно, что объясняет пузырь 8 циклов. Одна из возможных интерпретаций заключается в том, что очистка, вызванная BACLEAR, занимает около 8 циклов, но модуль выборки может все еще не работать в ожидании адреса, с которого он должен извлечь. Определение целевого адреса может занять более 8 циклов, в зависимости от того, как он рассчитывается и от окружающего кода. Или это может означать, что в среднем требуется всего около 8 циклов, чтобы полностью перестроить интерфейс и начать выборку с целевого адреса. Кроме того, это наказание за 8 циклов может фактически не быть на критическом пути, поэтому оно может не повлиять на общую производительность.

В итоге, BACLEAR_FORCE_IQ происходит, когда условный переход (и только условные переходы) отсутствует в BPU (а не в любом другом отказе BPU) и принимаются прогнозы IQ.

Я думаю, что BAC используется, чтобы справиться с любой ошибочной ситуацией в отрасли, а не только с IQ. Другие события производительности указывают на это.

Если цель условного перехода не найдена в массиве целей

Как это не может быть найдено? Вы маскируете его битовой маской, чтобы найти индекс в таблице и получить следующую цель ветвления.

Хорошо, если вы после того, как прочитали результат, убедитесь, что адрес вызова не совпадает с тегом результата, вы получите результат "не получен".

На данный момент мы переходим ко второй части утверждения.

и IQ предсказывает, что ветвь занята

Таким образом, цель ветвления говорит "не принято", и IQ предсказывает, что это будет принято, у нас есть противоречие.

Чтобы разрешить противоречие, IQ побеждает, так как цель ветвления просто "если мы прыгаем, мы прыгаем здесь", но IQ предсказывает, прыгнем мы или нет, основываясь на гораздо большей логике.

следовательно

тогда IQ заставит калькулятор адресов филиалов выдавать BACLEAR. Каждый BACLEAR, утвержденный BAC, генерирует приблизительно 8 циклов пузырька в конвейере выборки команд.

Что хорошо в 14-19 этапах. 8 циклов - если IQ может прочитать фактический целевой адрес из инструкции (в сочетании с ПК), если значение необходимо прочитать в регистре (это возможно, еще не исключено), это может занять немного больше времени.

Другие вопросы по тегам