Fast Path-Based Neural Branch Prediction(2003 MICRO)

提出该预测器的原因:以往的神经分支预测器由于复杂计算导致访问延迟过高。

该预测器的优势:延迟远低于以前的神经预测器;预测准确率高于以前的预测器。

该预测器的特点:由于分支结果与路径历史和模式历史都具有强相关性,因此该预测器使用沿到该分支的路径动态选择的神经元(权重)来预测分支。

A. 基于感知器的预测器

变量符说明:

h:所用历史长度;

n:权重表项数;

W[0..n-1,0..h]:权重表;具体实现为一个n块无标签直接映射存储空间,其中每一块包括h个8-bit权重(每个权重用8-bit表示);

G[1..h]:历史移位寄存器,其中每一项为taken或not_taken;

\theta:训练阈值,对于给定的历史长度是固定的。

B. 基于路径的神经预测器

图中横向表示按时间排列分支,纵列表示权重向量表中每个分支对应的8个权重 。在图1中,每个分支所对应的权重就是用于预测该分支的8个向量,而在图2中,每个分支所对应的权重向量中的第i个向量实际是预测该分支后第i个分支所用的权重。例如,b_(t-6)中的 x_6,是预测分支b_(t-6)后第6个分支 b_t 所用的向量,表示分支b_(t-6)对b_t的影响。

变量符说明:

SR[0...h]:存放当前分支接下来h个分支的部分和;

SR:SR的最新的非推测版本;

SG:存放推测性全局历史;

G:存放非推测性全局历史;

预测算法 

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 个分支。
  • 用到的全局历史是推测性的,即使用预测的结果与权重相乘,而非实际结果。

更新算法

更新的是其他分支权重向量表中与当前分支相关的权重。

H:表示预测算法中的SG;

v[1..h]:表示用于预测当前分支的 h 个分支在权重表的索引;

j:表示用于预测当前分支的第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%。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gradient-based neural dag learning(梯度优化的神经有向无环图学习)是一种用于构建和训练神经网络结构的方法。它通过学习网络的拓扑结构,即神经网络的连接方式和层次结构,来优化网络性能。 传统的神经网络结构通常是由人工设计的,而在gradient-based neural dag learning中,网络的结构可以通过梯度下降算法进行优化。该方法的核心思想是在训练过程中不仅学习网络的权重参数,还学习网络的拓扑结构。 在gradient-based neural dag learning中,网络的结构可以表示为有向无环图(DAG),图中的节点表示网络中的层或操作,边表示连接。我们可以用一组变量来表示每个节点的状态和连接关系,通过优化这些变量,实现网络结构的优化。 具体地,gradient-based neural dag learning通过计算网络中每个操作或层对目标函数的梯度来优化变量。在梯度下降的过程中,网络的结构随着反向传播算法的迭代而逐渐优化。这种方法可以使得网络自动完成结构的搜索和选择,提高了网络的表达能力和性能。 由于gradient-based neural dag learning可以自动进行网络结构的学习和优化,它可以减轻人工设计网络结构的负担,并且在处理复杂任务时能够获得更好的性能。然而,由于网络结构的搜索空间非常大,优化过程可能会很复杂,需要大量的计算资源和时间。 总之,gradient-based neural dag learning是一种通过梯度下降优化网络结构的方法,能够自动学习和优化神经网络的拓扑结构,提高网络性能。这种方法在深度学习领域有着广泛的应用潜力,并且为网络的设计和训练带来了新的思路和方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值