我正在读一本关于计算机体系结构的书,我在本章谈到分支预测。 有这个小练习让我很难缠绕它。
考虑以下内部for循环
for (j = 0; j < 2; j++)
{
for (i = 10; i > 0; i = i-1)
x[i] = x[i] + s
}
-------&GT;内循环:
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,R1保持x [10]的地址,并且当i == 0时,R3被预先计算以结束循环;
a)预测器如何在拍摄/不拍摄之间交替执行?
----由于循环只执行了2次,我认为备用预测会损害这种情况下的性能(?),并且有1次未命中预测。
b)1位分支预测缓冲区是否会提高性能(与a相比)?假设第一个预测是&#34;未采取&#34;,并且没有其他分支映射到此条目。
----假设第一个预测是&#34;未采用&#34;,如果预测错误,则1比特预测器将该比特反转。所以这将是NT / T / T.这是否与问题a)具有相同的性能? 1次错过预测。
c)2位分支预测缓冲区是否会提高性能(与a相比)?假设第一个预测是&#34;未采取&#34;,并且没有其他分支映射到此条目。
----以&#34开始的2位分支预测;未采取&#34;。我记得在错过两次后2位预测发生了变化。所以这个预测就像NT / NT / T / T.因此,与a)相比,它的性能会更差。 1错过预测
这是我尝试回答这些问题。任何人都可以向我解释我的答案是对还是错更详细的请问?感谢。
答案 0 :(得分:0)
由于循环仅执行2次
你的意思是外循环条件,你没有显示asm的那个?我现在只回答部分问题,以防这个混乱是你的主要问题。如果这不是您感到困惑的话,请发表评论。
内循环底部的条件分支执行20次,具有此模式:9xT,1xNT,9xT,1xNT。交替预测器在50%的时间内会出现错误,+ / - 20%取决于它是正确还是错误。
外循环只运行两次:T,NT。整个内循环运行两次。
根据交替预测是以T还是NT开始,外环分支将被完美或非常预测。