2014-10-26 1 views
1

Я думаю, что есть что-то, чего я просто не получаю. Я считаю, что понимаю концепцию BTB ... но я не понимаю, как это полезно.Как буфер-ответчик ветвей уменьшает задержку?

Таким образом, BTB, на этапе IF конвейерного процессора, позволяет нам узнать вероятную цель ветви. Это знания, которые мы обычно обнаруживаем на этапе идентификации ... поэтому у нас есть это на один этап раньше.

Но ... ну и что? Что мы делаем с этой информацией? Как это делает наш трубопровод быстрее?

+1

Даже для такого мелкого скалярного трубопровода отсутствие BTB (или отложенной ветви) будет означать, что принятые ветви имеют индекс CPI 2 (одна сброшенная команда).При примерно одной ветви в каждых пяти инструкциях и примерно половине из них CPI без BTB будет 1,1 (0,9 * 1 CPI + 0,1 * 2 CPI). Для современных высокопроизводительных процессоров задержка между началом выборки и вычислением адреса больше 1 цикла * и * выдается несколько инструкций за цикл. Косвенные прыжки обычно страдают еще большим штрафом. –

ответ

2

Эффективность удара BTB более очевидна в суперскарных процессорах. Супер скаляр означает, что процессор имеет несколько идентификаторов (декодеры команд). Для процессоров Intel Core пример 4-го поколения (Haswell) имеют 4 декодеров, ARM A15 части имеют 3 декодеров и т.д.

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

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

Если у нас нет прогноза ветвления (с BTB), то ЦП должен ждать оценки условных инструкций, а между тем остальные идентификаторы ничего не сделают, пока условие оценивается, не используя преимущества " супер-скалярность ":).

Почему важное значение имеет предсказание ветвей ... оно помогает CPU выполнить как можно больше инструкций за цикл. Например, процессоры Haswell теоретически могут выполнять 4 команды в одном цикле. BTB помогает в этом.

+0

Если не было никакого предиктора ветвления, CPU все еще мог бы извлечь и выполнить не пройденный путь. Было бы просто нужно раздавить инструкции, если ветка была взята. –

+0

@CraigAnderson, если это то, что вы предлагаете ... Я не уверен, что вы можете выполнять параллельные инструкции для обеих ветвей, потому что они используют одни и те же данные/адреса. Вы можете выполнить в точке только по выбранному пути. – VAndrei

+0

VAndrei @VAndrei - на самом деле, можно выполнить оба пути. [Этот документ] (http://gram.eng.uci.edu/~swallace/papers_wallace/pdf/ISCA-98-TME.pdf) рассказывает о преимуществах этого. Это непросто. –

0

С этой информацией ЦП может начать процесс выборки, декодирования и спекулятивного выполнения кода в целевой ветке раньше.

1

Когда речь идет о филиалах в потоке инструкций, есть три вопроса:

  1. Является ли эта команда инструкции ветвления?
  2. Если это условная ветвь, будет ли ветка выполнена?
  3. Если ветка взята или является безусловной ветвью, откуда должна быть выбрана следующая инструкция? Что такое отрасль target?

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

Профили ответчика пытается предсказать ответ на вопрос # 2. BTB пытается предсказать ответ на вопрос №3. Хотя часто люди ломают BTB, когда говорят о «отраслевом предсказателе».