首页 文章

Intel CPUs指令队列提供静态分支预测?

提问于
浏览
12

在“英特尔手册”第3卷中,它包含硬件事件计数器的说明:

BACLEAR_FORCE_IQ计算指令队列强制BACLEAR的次数 . IQ还负责基于由L2分支预测单元提供的静态方案和动态数据来提供条件分支预测方向 . 如果在目标阵列中找不到条件分支目标并且IQ预测分支被采用,则IQ将强制分支地址计算器发出BACLEAR . BAC声明的每个BACLEAR在指令获取管道中产生大约8个周期的气泡 .

我一直以为分支地址计算器执行静态预测算法(当分支目标缓冲区不包含分支条目时)?

任何人都可以确认上述哪两个是正确的?我找不到任何东西 .

2 回答

  • 3

    如果在目标阵列中找不到条件分支目标

    怎么没找到?你用一个掩码掩码它来找到表中的索引并获得下一个分支目标 .

    好吧,如果您在阅读结果后检查调用地址与结果上的标记不匹配,那么您将获得“未采用”结果 .

    在这一点上,我们进入声明的第二部分 .

    并且IQ预测分支被采用

    所以分支目标说“没有采取”,智商预测会采取我们的矛盾 .

    为了解决智商赢得的矛盾,因为分支目标只是“如果我们跳,我们跳到这里”,但智商预测我们是否跳过或不基于更多的逻辑 .

    于是

    然后IQ将强制分支地址计算器发出BACLEAR . BAC声明的每个BACLEAR在指令获取管道中产生大约8个周期的气泡 .

    这在14-19阶段的管道中是好的 . 如果IQ可以从指令(与PC结合)读取实际目标地址,则8个周期,如果需要在寄存器中读取该值(可能尚未退出),则可能需要更长时间 .

  • 1

    是 . 现代英特尔处理器使用至少一种静态预测技术和至少一种动态预测技术(例如性能事件描述中提到的L2 BPU) . 英特尔优化手册中讨论了静态预测,但没有明确说明静态预测的确切位置 . 但是,与分支预测相关的多个性能事件的描述(例如 BACLEAR_FORCE_IQ )表明它是在IQ单元中实现的 . 我认为这是静态分支预测最有意义的地方 .

    BPU首先猜测分支指令最有可能位于(将)获取的指令流字节中(Haswell中每个周期32个字节,获取单元宽度的两倍) . 然后,基于预测为控制传输指令的指令的虚拟指令地址,BPU查询其缓冲区(具体地,“分支目标缓冲区”或“目标阵列”) . ),对预测的分支(方向和目标地址)做出更多预测 . 但是,在某些情况下,BPU在其缓冲区中未命中,或者可能错误地预测了指令流字节中的分支指令的位置,或者可能存在比BPU可以处理的分支更多的分支 . 无论情况如何,无论做出什么预测,它们都会以指令流字节传递给指令队列单元 . 这是管道中最早的地方,其中每个指令的开始和结束以及哪些指令可以转移控制 .

    IQ还负责基于L2分支预测单元提供的静态方案和动态数据提供条件分支预测方向 .

    这部分事件描述现在应该对你有意义 . 请注意,静态分支预测主要仅用于预测方向,而不是目标地址 .

    如果在目标数组中找不到条件分支目标,并且IQ预测分支被采用...

    仅当BPU无法进行预测时,才使用简单的静态分支预测器 . 所以条件的第一部分是有道理的 . 然而,第二部分基本上说,如果IQ预测没有采取,那么就不需要做任何事了 . 这表示默认情况下,获取单元将继续从BPU故障的直通路径中获取代码 .

    ......然后IQ将强制分支地址计算器发出BACLEAR

    因此,如果静态预测器预测,那么最好对此做一些事情 . 一个直观的事情是刷新IQ之上的所有内容并告诉获取单元停止获取字节 . 这就是BACLEAR信号的作用 . 这种情况称为前端转发 . 如果我们可以告诉获取单元从何处获取,那将是很好的,但我们还不知道分支目标地址 . 即使地址嵌入在指令中(作为立即操作数),IQ也可能不是仅提取它并转发到获取单元 . 我们可以什么都不做,等到计算地址,从而可能节省电力和能源 . 或者我们可以为BPU提供地址(现在我们确切地知道分支指令的位置)并让BPU再次尝试 . 也许,“分支地址计算器”的目的,不仅是发送BACLEAR信号,而且还尽可能早地确定地址 .

    BAC声明的每个BACLEAR在指令获取管道中产生大约8个周期的气泡 .

    我不清楚8周期泡沫占什么 . 一种可能的解释是,由BACLEAR引起的刷新大约需要8个周期,但是获取单元可能仍然处于空闲状态,等待它应该从中获取的地址 . 确定目标地址可能需要8个以上的周期,具体取决于计算方式和周围代码 . 或者它可能意味着,平均而言,完全重新转发前端并开始从目标地址获取只需要大约8个周期 . 此外,这8个周期的惩罚可能实际上不在关键路径上,因此它可能不会影响整体性能 .

    总之,当条件分支(并且只有条件分支)在BPU中丢失(而不是任何其他BPU故障)并且IQ预测时,会发生 BACLEAR_FORCE_IQ .

    我认为BAC用于处理任何分支错误预测情况,而不仅仅是智商 . 其他表演事件表明 .

相关问题