Я читаю книгу об компьютерной архитектуре, и я на этой главе расскажу о предсказании ветвей. Это небольшое упражнение, с которым мне трудно переносить голову.Прогнозирование ветвей и производительность
Рассмотрим следующий внутренний цикл
for (j = 0; j < 2; j++)
{
for (i = 10; i > 0; i = i-1)
x[i] = x[i] + s
}
-------> Внутренний контур:
L.D F0, 0(R1)
ADD.D F4, F0, F2
S.D F4, 0(R1)
DADDUI R1, R1, -8
BNE R1, R3, Loop
Предположим регистре F2 имеет скалярные S, R 1 содержит адрес х [ 10], а R3 предварительно вычисляется для завершения цикла при i == 0;
a) Как будет предиктор, который чередуется между принятыми/не выполненными?
---- Поскольку цикл выполняется только 2 раза, я думаю, что альтернативное предсказание повредило бы производительность в этом случае (?) С 1 пропущенным предсказанием.
b) Может ли 1-разрядный буфер предсказания ветвления повысить производительность (по сравнению с a)? Предположим, что первое предсказание «не принято», и никакие другие ветви не сопоставляются с этой записью.
---- Предполагая, что первое предсказание «не принято», а 1-битный предиктор инвертирует бит, если предсказание неверно. Так будет NT/T/T. Означает ли это, что он имеет такую же производительность, что и проблема а)? с 1 прогнозом промаха.
c) Может ли 2-разрядный буфер предсказания ветвления повысить производительность (по сравнению с a)? Предположим, что первое предсказание «не принято», и никакие другие ветви не сопоставляются с этой записью.
---- 2-битное предсказание ветви, начинающееся с «не принято». Как я помню, 2-битное предсказание изменилось после того, как он пропустил дважды. Таким образом, это предсказание будет идти как NT/NT/T/T. Поэтому его производительность будет хуже, чем а). 1 пропущенный прогноз
Это была моя попытка ответить на проблемы. Может ли кто-нибудь объяснить мне, если мой ответ будет правильным/неправильным более подробно, пожалуйста? Благодарю.
О, я понял, что внутренняя петля понимает неправильно. Я вижу сейчас. Является ли мое понимание 1-битного предсказания ветвей и 2-битного предсказания правильным для B) и C)? (игнорируя неправильный цикл) –
И для вопроса a).Предполагая, что это начинается как NT, но эта ветка, как предполагается, должна быть взята, возвращается ли система и берет этот цикл позже? Означает ли это, что для запуска внутренней ветки цикла потребуется в два раза больше времени? –
@NguyenTran: CPU всегда «появляется» для запуска инструкций в правильном порядке программы. Как только обнаруживается ошибочное предсказание, вся неправильно работающая работа отбрасывается, и она начинает выполняться с правильной стороны ветки. Обычно ошибочный прогноз стоит много раз больше циклов, чем правильно спрогнозированная ветвь. (например, 15 циклов против 1 цикла для длинного трубопровода). –