Почему целевой буфер филиала разработан как кеш? - PullRequest
0 голосов
/ 30 октября 2018

BHT не является кешем и не должен быть, потому что это нормально, если допущена ошибка при доступе к нему. BTB, однако, разработан как кеш, потому что он всегда должен возвращать либо попадание, либо промах. Почему BTB не может ошибиться?

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

BTB может представлять ложное попадание, и в настоящее время это используется некоторыми реализациями посредством использования частичных тегов. (Точно так же можно было бы, чтобы одна запись на набор была полностью без тегов; в BTB с прямым отображением записи не были бы помечены. Традиционная ассоциативно-множественная конструкция, имеющая (частичные) теги для каждого способа, дает «бесплатное» обнаружение промахов как часть выбора пути.) Как отмечает ответ Питера Кордеса , эту ошибку можно обнаружить и исправить позже в конвейере.

Признание промахов BTB позволяет подавить спекуляции. Если BTB используется для предварительной выборки потока инструкций после пропуска кэша команд, то предотвращение загрязнения кэша и неправильной спецификации потери пропускной способности может оказать влияние на производительность. Когда производительность ограничена энергетическими или тепловыми соображениями, предотвращение ошибочных предположений, даже если они будут быстро обнаружены и исправлены, может сэкономить некоторое количество энергии / тепла и, таким образом, потенциально улучшить производительность.

При использовании двухуровневой BTB индикация попадания может позволить не получить доступ к LB BTB для этой ветви. Помимо энергоэффективности, BTB L2, возможно, был разработан для обеспечения меньшей полосы пропускания или для совместного использования с другим тесно связанным механизмом выборки (поэтому полоса пропускания, не используемая одним механизмом выборки, могла бы использоваться другой).

Кроме того, индикация пропуска BTB может использоваться для улучшения прогнозирования направления ветвления. Отсутствие указывает, что ветвь, вероятно, не была взята в недавней истории (независимо от того, была ли недавно выполнена или не взята во время недавнего выполнения); предиктор направления ветвления может выбрать переопределение принятого предсказания (с целью, вычисленной при декодировании) или может выбрать обработку предсказания как низкую достоверность (например, используя динамическое предикацию или предоставляя приоритет выборке из других потоков). Первый эффективно отфильтровывает никогда не взятые ветви от предиктора (которому разрешено иметь деструктивный псевдоним, который предсказывает взятые); в обоих случаях указание промаха использует вероятность того, что старая информация о ветвях с меньшей вероятностью будет точной.

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

Если BTB предоставляет прогнозирование направления на адрес или другую информацию, используемую для прогнозирования направления, индикация пропуска могла бы позволить предиктору направления использовать другие методы для предоставления такой информации (например, статическое прогнозирование ветвления). Статическое предсказание может быть не особенно точным, но оно, вероятно, будет более точным, чем «случайное» предсказание с принятым уклоном (поскольку никогда не взятые ветви могут никогда не войти в BTB, и замена может быть основана на наименьшем количестве принятых недавно); «статический» предиктор также может использовать факт пропуска BTB. Если используется предиктор согласия (где статическое смещение записывается с предсказанием для уменьшения деструктивного наложения, смещенные взятые взятые ветви имеют такое же обновление предиктора, как смещенные не взятые ветви, которые не взяты), смещение на адрес является необходимо.

BTB L1 также может быть интегрирован с кэшем команд L1, особенно для относительных целей адреса ветвления, так что не только отсутствует обнаружение пропусков (присутствуют теги для всех путей), но и предоставляемая BTB цель может даже не быть прогноз (избегая необходимости пересчитывать цель). Это потребует дополнительных ресурсов прогнозирования для непрямых ветвлений (и BTB L2 может использоваться для поддержки предварительной выборки при пропусках кэша команд), но может избежать существенного избыточного хранения (поскольку такие команды ветвления уже сохраняют смещение).

Даже если определение пропуска BTB не является необходимым, оно может быть полезным.

0 голосов
/ 30 октября 2018

BTB может совершать ошибки, и неправильное предположение будет обнаружено, когда команда перехода фактически выполняется (или декодируется для прямых ветвлений), что приводит к появлению пузыря, когда интерфейс переходит к получить из правильного места.

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

...