https://blog.cloudflare.com/branch-predictor/ содержит отличный анализ производительность филиалов на современном оборудовании.
Одна вещь, которая меня удивила, заключалась в том, что безусловные переходы занимают место в целевом буфере ветвления. Почему?
Условные переходы требуют использования BTB, потому что в то время, когда ЦП только что декодировал инструкцию перехода и хочет получить следующую, он еще не знает значения условия. Но для безусловных переходов нет условия, значение которого нужно знать. Существует смещение, которое необходимо добавить к IP-адресу, где была найдена инструкция перехода, но это константа в инструкции; мне кажется, что он у вас уже есть к моменту получения опкода. Что мне не хватает?
ret
иjmp rax
. И, кстати, я нашел еще один дубликат, Какое неверное предсказание ветвления обнаруживает целевой буфер ветвления?, в котором упоминается безусловный относительный и не такой беспорядочный / hand-wavy как ответ slow-jmp, который я написал некоторое время назад: P О, и более точный дубликат, Почему целевые буферы ветвей необходимы для инструкции перехода без регистрации? - person Peter Cordes   schedule 07.05.2021