Почему безусловные переходы занимают место в BTB?

https://blog.cloudflare.com/branch-predictor/ содержит отличный анализ производительность филиалов на современном оборудовании.

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

Условные переходы требуют использования BTB, потому что в то время, когда ЦП только что декодировал инструкцию перехода и хочет получить следующую, он еще не знает значения условия. Но для безусловных переходов нет условия, значение которого нужно знать. Существует смещение, которое необходимо добавить к IP-адресу, где была найдена инструкция перехода, но это константа в инструкции; мне кажется, что он у вас уже есть к моменту получения опкода. Что мне не хватает?


person rwallace    schedule 07.05.2021    source источник
comment
ЦП должен (предварительно) получать инструкции с нового IP-адреса даже для безусловных переходов - как он узнает этот адрес без BTB? Это объясняется в связанной статье прямо под первым красочным изображением (раздел Зачем нужен прогноз ветвлений?).   -  person Arvo    schedule 07.05.2021
comment
Предсказание переходов необходимо для конвейерной обработки следующей выборки еще до того, как блок инструкций будет декодирован. Медленная jmp-инструкция. Даже в классическом 5-ступенчатом RISC одна инструкция декодируется, а следующая уже извлекается. В суперскалярных процессорах, которые извлекают код более крупными выровненными блоками, вам все равно нужно предсказать, по крайней мере, правильный блок для выборки.   -  person Peter Cordes    schedule 07.05.2021
comment
@PeterCordes Ах! Таким образом, ответ заключается в том, что у вас есть смещение к тому времени, когда у вас есть код операции, но ЦП хочет получить следующую инструкцию в более раннее время, когда у него еще нет кода операции, поэтому BTB эффективно служит кешем не только для места назначения перехода, но и для того факта, что в этом месте есть инструкция перехода?   -  person rwallace    schedule 07.05.2021
comment
@rwallace: Да, именно так.   -  person Peter Cordes    schedule 07.05.2021
comment
Обратите внимание, что BTB полезен для предсказания адресов непрямых переходов. В этом случае именно серверная часть будет эффективно вычислять цель. Это было бы гораздо более трудоемко, чем управление выборкой во время (предварительного) декодирования.   -  person Margaret Bloom    schedule 07.05.2021
comment
@MargaretBloom: Хорошо, название вопроса могло бы быть более конкретным: безусловные прямые переходы, чтобы исключить непрямые переходы, такие как ret и jmp rax. И, кстати, я нашел еще один дубликат, Какое неверное предсказание ветвления обнаруживает целевой буфер ветвления?, в котором упоминается безусловный относительный и не такой беспорядочный / hand-wavy как ответ slow-jmp, который я написал некоторое время назад: P О, и более точный дубликат, Почему целевые буферы ветвей необходимы для инструкции перехода без регистрации?   -  person Peter Cordes    schedule 07.05.2021