提出该预测器的原因:以往的神经分支预测器由于复杂计算导致访问延迟过高。
该预测器的优势:延迟远低于以前的神经预测器;预测准确率高于以前的预测器。
该预测器的特点:由于分支结果与路径历史和模式历史都具有强相关性,因此该预测器使用沿到该分支的路径动态选择的神经元(权重)来预测分支。
A. 基于感知器的预测器
变量符说明:
:所用历史长度;
:权重表项数;
:权重表;具体实现为一个n块无标签直接映射存储空间,其中每一块包括h个8-bit权重(每个权重用8-bit表示);
:历史移位寄存器,其中每一项为taken或not_taken;
:训练阈值,对于给定的历史长度是固定的。
B. 基于路径的神经预测器
图中横向表示按时间排列分支,纵列表示权重向量表中每个分支对应的8个权重 。在图1中,每个分支所对应的权重就是用于预测该分支的8个向量,而在图2中,每个分支所对应的权重向量中的第i个向量实际是预测该分支后第i个分支所用的权重。例如,b_(t-6)中的 x_6,是预测分支b_(t-6)后第6个分支 b_t 所用的向量,表示分支b_(t-6)对b_t的影响。
变量符说明:
:存放当前分支接下来h个分支的部分和;
:SR的最新的非推测版本;
:存放推测性全局历史;
:存放非推测性全局历史;
预测算法
function prediction(pc:integer):{taken,not_taken}
begin
i = pc mod n
y = SR[h] + W[i,0] //对于每次预测,使用SR中的部分和加上权重表中的偏置权重即可
if y ≥ 0 then
prediction = taken
else
prediction = not_taken
end if
for j in 1..h in parallel do //基于本次预测结果更新接下来h个分支的部分和,即在已有的
k_j = h-j //部分和的基础上加上本分支对接下来h个分支的影响
if prediction = taken then //W[i,j]中存放的是本分支对接下来第j个分支的权重值
SR'[k_j + 1] = SR[k_j] + W[i,j] //用于预测接下来第j个分支,而非预测本分支
else
SR'[k_j + 1] = SR[k_j] - W[i,j]
end if
end for
SR = SR'
SR[0] = 0 //初始化接下来第 h 个分支的部分和
SG = (SG << 1) or prediction //把本分支预测结果打入预测全局历史 SG 中
end
- 与原来的感知器预测器不同,之前的感知器预测器中每个分支在权重表中索引到的权重向量中的向量都用于预测本分支,而现在每个分支所对应的权重向量中的向量都用于预测接下来的分支(其实存的是别的分支所对应当前分支的权重),其中第 i 个向量用于预测从本分支开始算第 i 个分支。
- 用到的全局历史是推测性的,即使用预测的结果与权重相乘,而非实际结果。
更新算法
更新的是其他分支权重向量表中与当前分支相关的权重。
:表示预测算法中的SG;
:表示用于预测当前分支的 h 个分支在权重表的索引;
:表示用于预测当前分支的第j个分支(按时间顺序数),即当前分支是该分支后第 j 个;
procedure train(i,y_out:integer;prediction,outcome:{taken,not_taken}),
v:array[1..h] of integer;H:array[1..h] of {taken,not_taken} )
begin
if prediction ≠ outcome or |y_out| ≤ θ then
if outcome = taken then
W[i,0] = W[i,0] + 1
end if
if outcome = not_taken then
W[i,0] = W[i,0] - 1
for j in 1..h in parallel do //更新所用到的h个分支对应的权重表中与当前分支相关的
k = v[j] //权重值
if outcome = H[j] then
W[k,j] = W[k,j] + 1]
if outcome ≠ H[j]
W[k,j] = W[k,j] - 1
end for
end if
G = (G << 1) or outcome //更新实际全局历史移位寄存器
if prediction ≠ outcome then
SG = G
SR = R //误预测时把R中的内容重新存储到SR中
end if
end
该预测器中,由于在每个分支做预测前就开始了求和的过程,因此延迟几乎可以完全隐藏。
实验结果
误预测率:相比之前的感知器预测器,预测准确率并没有提高多少,平均错误预测率5.7%,相比全局/局部感知器预测器的6.1%只少了7%,且在图7给出的17个benchmark中,只在9个中错误预测率最低,整体感觉预测准确率和先前的感知器预测器差不太多。
IPC:图8显示了在同样硬件预算下,基于路径的神经预测器的IPC最高,这主要归功于较高的预测准确率和低延迟。例如,与全局/局部感知器预测器相比,基于路径的神经预测器延迟较低,而与剩下几个预测器相比,延迟相当,但其准确率较高,因此整体IPC较高。在64KB硬件预算下,基于路径的神经预测器比全局/局部感知器预测器的IPC高了16%。