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

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

BACLEAR_FORCE_IQ

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

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

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


person user997112    schedule 26.07.2015    source источник
comment
Я удалил свой ответ, так как он мне не помог. Но я заметил, что в справочном руководстве по оптимизации Intel сказано: «Микроархитектура Intel Core не использует эвристику статического прогнозирования». Однако для обеспечения согласованности между процессорами Intel 64 и IA-32 программное обеспечение должно поддерживать эвристику статического предсказания по умолчанию.   -  person Gabriel Southern    schedule 30.07.2015


Ответы (2)


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

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

Что ж, если вы после прочтения результата убедитесь, что адрес вызова не совпадает с тегом в результате, вы получите результат «не принят».

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

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

Итак, цель ветки говорит «не занято», а IQ предсказывает, что она будет принята. У нас есть противоречие.

Чтобы разрешить противоречие, IQ побеждает, поскольку цель перехода - это просто «если мы прыгнем, мы прыгнем сюда», но IQ предсказывает, прыгнем мы или нет, на основе гораздо большей логики.

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

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

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

person Surt    schedule 08.11.2016

да. Современные процессоры Intel используют по крайней мере один метод статического предсказания и по крайней мере один метод динамического предсказания (такой как L2 BPU, упомянутый в описании события производительности). Статическое предсказание обсуждается в руководстве 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. Другие события производительности указывают на это.

person Hadi Brais    schedule 03.06.2018
comment
В чем заключается смысл предсказателя статуса, BPU и IQ? Какая информация имеет IQ, когда ветвь не может быть найдена в BPU, что сделало бы его лучше отслеживаемым, чем статический предсказатель? - person Noah; 13.05.2021