这个问题来自Shen和Lipasti的现代处理器设计。
考虑问题5的循环体内的以下代码段:
if (x is even) then (branch b1) increment a (b1 taken) if (x is a multiple of 10) then (branch b2) increment b (b2 taken)
假设以下9个x值列表将由此循环的9次迭代处理。 8,9,10,11,12,20,29,30,31。注意:假设在下一个动态分支访问预测器之前,每个动态分支都更新预测器条目(即,没有更新延迟)。
假设使用两级分支预测方案。除了一位预测器之外,还使用一位全局寄存器(g)。寄存器g存储最后执行的分支的方向(可能与当前正在预测的分支不同),并用于索引到两个单独的一位分支历史表(BHT),如下所示。
根据g的值,选择两个BHT中的一个并用于进行正常的一位预测。再次,填充循环的九次迭代的b1和b2的预测和实际分支方向。假设g = 0的初始值,即NT。对于每个预测,取决于g的当前值,仅访问和更新两个BHT中的一个。因此,下面的一些条目应该是空的。
注意:假设在下一个动态分支访问预测变量之前每个动态分支更新预测变量条目(即没有更新延迟)。
8 9 10 11 12 20 29 30 31
对于g = 0
b1预测:__ N____ T____N___ _ __ T____ T _ __ __ T ______
b1实际:__ T____ N____T____ N____ T____ T____ N____ T____ N __
b2预测:____ __ N______ __ N____ __ _ _ __ N____ __ __ N
b2实际:__ N____ N____T____ N____ N____ T____ N____ T____ N __
对于g = 1
b1预测:____ ____ ____ __ N______ _ _ __ N _ _ __ N
b1实际:__ T____N____ T____ N____ T____ T____ N____ T____ N __
b2预测:__ N______ __ N______ __ T____ N____ __ __ T____ __b2实际:__ N____N____ T____ N____N____ T____ N____ T____ N__
这些表格值背后的逻辑是什么,g = 0和g = 1?