2016-05-18 3 views
0

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

Рассмотрим следующий внутренний цикл

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 пропущенный прогноз

Это была моя попытка ответить на проблемы. Может ли кто-нибудь объяснить мне, если мой ответ будет правильным/неправильным более подробно, пожалуйста? Благодарю.

ответ

0

Поскольку цикл выполняется только в 2 раза

Вы имеете в виду внешний контур условного, то один вы не показали ассемблер для? На данный момент я отвечаю только на часть вопроса, если эта путаница была вашей главной проблемой. Оставьте комментарий, если это вас не смутило.


Условные ветви в нижней части внутреннего контура выполняются в 20 раз, при этом скороговоркой: 9xt, 1xNT, 9xt, 1xNT. Альтернативный предиктор будет ошибочным примерно в 50% случаев, +/- 20% в зависимости от того, было ли это правильно или неправильно.

Это внешний цикл, который работает только дважды: T, NT. Вся внутренняя петля выполняется дважды.

Внешняя ветвь цикла будет либо предсказана идеально, либо ужасно, в зависимости от того, началось ли чередование предсказания с T или с NT.

+0

О, я понял, что внутренняя петля понимает неправильно. Я вижу сейчас. Является ли мое понимание 1-битного предсказания ветвей и 2-битного предсказания правильным для B) и C)? (игнорируя неправильный цикл) –

+0

И для вопроса a).Предполагая, что это начинается как NT, но эта ветка, как предполагается, должна быть взята, возвращается ли система и берет этот цикл позже? Означает ли это, что для запуска внутренней ветки цикла потребуется в два раза больше времени? –

+0

@NguyenTran: CPU всегда «появляется» для запуска инструкций в правильном порядке программы. Как только обнаруживается ошибочное предсказание, вся неправильно работающая работа отбрасывается, и она начинает выполняться с правильной стороны ветки. Обычно ошибочный прогноз стоит много раз больше циклов, чем правильно спрогнозированная ветвь. (например, 15 циклов против 1 цикла для длинного трубопровода). –

Смежные вопросы